我正在努力将一个 git repo 从一个提供商转移到另一个提供商。作为该过程的一部分,由于历史记录中文件的大小(文件在几个月前被删除但仍然存在于历史记录中),新的 repo 在推送时被拒绝。
我找到了两者git filter-branch
,并BFG repo-cleaner
作为解决此问题的选项。它们按预期工作,并允许我推送到新的 repo,但我发现任何带有签名的 ref 都task/my-branch
被复制到Task/my-branch
,我找不到任何可以解释为什么或如何避免这种情况的参考。最坏的情况我可以在移动后手动清理这些,但想更好地了解它发生的原因以及是否有办法阻止它。
使用 BFG 清洁剂采取的步骤
1) git clone --bare ssh://path/to/repo.git
2) cd repo.git
3) git 分支 -a
观察分支,例如task/my-branch
4) 光盘..
5) java -jar bfg.jar --delete-files repo.git
6) git reflog expire --expire=now --all && git gc --prune=now --aggressive
7) git 分支 -a
观察分支,例如task/my-branch
ANDTask/my-branch
与 git filter-branch 类似的过程
1) git clone --bare ssh://path/to/repo.git
2) cd repo.git
3) git 分支 -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 分支 -a
观察分支,例如task/my-branch
ANDTask/my-branch