我正在将git repo从一个提供程序转移到另一个提供程序。作为该过程的一部分,由于历史记录中文件的大小,新回购将在推送时被拒绝(文件在几个月前已删除,但仍存在于历史记录中)。
我发现git filter-branch
和BFG repo-cleaner
都是解决此问题的选择。它们按预期工作,并允许我推送到新的存储库,但是我发现签名为task/my-branch
的所有引用都与Task/my-branch
复制了,我找不到任何可以解释为什么或如何避免这种引用的引用。在最坏的情况下,我可以在移动后手动清理这些故障,但想更好地了解发生这种情况的原因以及是否有预防方法。
使用BFG清洁剂采取的步骤
1)git clone --bare ssh://path/to/repo.git
2)cd repo.git
3)git branch -a
观察诸如task/my-branch
4)cd ..
5)java -jar bfg.jar --delete-files repo.git
6)git reflog expire --expire = now --all && git gc --prune = now --aggressive
7)git branch -a
观察分支,例如task/my-branch
和Task/my-branch
与git filter-branch类似的过程
1)git clone --bare ssh://path/to/repo.git
2)cd repo.git
3)git branch -a
观察诸如task/my-branch
4)git filter-branch -f --prune-empty --tag-name-filter cat --tree-filter'rm -f---all
5)git for-each-ref --format =“%(refname)” refs / original / | xargs -n 1 git update-ref -d
6)git reflog expire --expire = now --all && git gc --prune = now --aggressive
7)git branch -a
观察分支,例如task/my-branch
和Task/my-branch