TL; DR:是否有一种有效的方法可以将“从现在开始”推送到镜像另一个的git存储库,而不会丢失同一项目的其他镜像上的历史记录?
我有一个具有一定规模的项目(也就是说,“胖”)被推送到三个不同的存储库;一个“支持”该项目的组织内部,一个是Sourceforge,另一个是GitHub。
不幸的是,在此项目“公开”到GitHub之前,一些大型AI“知识库”类型的数据文件作为CSV文件添加到存储库中;几个超过GitHub的大小限制(软限制50MiB,硬限制100MiB)
一旦我们意识到大小问题,我已经删除了文件并推送了Makefile将会(在我正确行动后)的BZ2文件在构建过程中展开,当文件被编译到系统中时状态。
现在,内部存储库和Sourceforge是同步的,但即使HEAD中没有这些文件,我也无法推送到GitHub。
没有消除.git控制文件(argh,并且有子模块!再次设置正确的痛苦......)并重新开始,有没有办法像
那样 git push origin BRANCH
git push sourceforge BRANCH
git push github from-xyzzy-to-HEAD:BRANCH
我最好的猜测是使用
git push github 320ce5..HEAD:BRANCH
但是我明白了 错误:src refspec 320ce5..HEAD与任何匹配。 错误:未能将某些引用推送到...
(注意:320ce5是最新的提交,其中删除了违规的CSV文件。所以它是presumable = HEAD。我还尝试添加一个无用的空文件,然后删除它以“伪造”某些历史记录,如果是问题,但它没有帮助。)
我开始相信答案是“不”,我应该归档先前的存储库状态,咬紧牙关,重新开始,这真的不应该伤害任何人的感情,但它是一个麻烦。
答案 0 :(得分:0)
这不是直接的答案,但可能对您有用。从repo中删除大文件而不用BFG
删除整个历史记录bfg --strip-blobs-bigger-than 1M --replace-text banned.txt repo.git
清理存储库
git gc --prune=now --aggressive
并使用
将已更改的repo推送到存储库git push --force --all
也可以实现此目的
相关问题: