Gitリポジトリからサブプロジェクトを分割しようとしています。ただし、 Detach(move)subdirectoryを別のGitリポジトリに それ自体のサブディレクトリにはありません(移動して上記を実行すると、移動後の履歴のみが生成されます)。
サブプロジェクトを分割したいブランチを独自のリポジトリに複製し、サブプロジェクトで使用されていないものをすべて削除したので、基本的にこれをサブプロジェクトのリポジトリとして使用できます。
ここで、このリポジトリに存在しなくなったすべてのファイルの履歴を削除して、子孫になったファイルのファイル履歴のみを保持したいと思います。
Git-filter-branchで可能だと思いますが、どうすればいいのかわかりません
よろしくお願いします
ここにあなたがやりたいことをするためのいくつかの指示があります。
これにより、file_to_remove
が削除されます。
git filter-branch --index-filter 'git rm --cached --ignore-unmatch file_to_remove' --Prune-empty -- --all
さて、私は次のテクニックを試しています。かなり長時間実行されているように見えるので、うまくいった場合は報告します。クローンリポジトリのzshまたはbash
git log --diff-filter=D --summary <start_commit>..HEAD | egrep -o '*[[:alnum:]]*(/[[:alnum:].]*)+$' > deleted.txt
削除されたすべてのファイルを取得するには
for del in `cat deleted.txt`
do
git filter-branch --index-filter "git rm --cached --ignore-unmatch $del" --Prune-empty -- --all
# The following seems to be necessary every time
# because otherwise git won't overwrite refs/original
git reset --hard
git for-each-ref --format="%(refname)" refs/original/ | xargs -n 1 git update-ref -d
git reflog expire --expire=now --all
git gc --aggressive --Prune=now
done;
これはデータにとって非常に危険である可能性があるため、クローンのみを試してください。