使え。(subdirectory-filter個別にしてこれ実行してpullしたら良い感じになるんじゃねーの!?)
git filter-branch -f --tree-filter '
for file in `find -type f | grep -v ./$(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/ | grep -v .git | sed "s/\.\///g"`
do
if [ -d ${file%/*} ]; then
mkdir -p $(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/${file%/*}
mv $file $(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/${file%/*}
else
mkdir -p $(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/
mv $file $(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/
fi
done
'解 体 新 書
# forで現在のディレクトリのファイル一覧からすべてファイル取得、その時既にサブディレクトリにパスされているもの、.gitは含まない。
# .git-rewrite以降を消してるのはtempだからです
for file in `find -type f | grep -v ./$(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/ | grep -v .git | sed "s/\.\///g"`
do
# フォルダのなかにあったらフォルダ構造を維持する
if [ -d ${file%/*} ]; then
mkdir -p $(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/${file%/*}
mv $file $(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/${file%/*}
else
mkdir -p $(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/
mv $file $(pwd | sed -e "s/\/\.git-rewrite.*//g" | sed -e "s/.*\///g")/
fi
done