Skip to content

Instantly share code, notes, and snippets.

@droidfivex
Last active December 24, 2016 07:54
Show Gist options
  • Select an option

  • Save droidfivex/eb82adb019fe9089c2236d6a5f21f11b to your computer and use it in GitHub Desktop.

Select an option

Save droidfivex/eb82adb019fe9089c2236d6a5f21f11b to your computer and use it in GitHub Desktop.

フォルダ構成と履歴残したままgitレポジトリから数フォルダ切り出してえ

使え。(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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment