【发布时间】:2014-01-18 13:49:48
【问题描述】:
TL;DR:有没有一种有效的方法可以将“从现在开始,仅”推送到镜像另一个的 git 存储库,而不会丢失同一项目的其他镜像上的历史记录?
我有一个一定规模的项目(也就是说,“胖”)被推送到三个不同的存储库;一个是“赞助”该项目的团队内部的一个,一个是 Sourceforge,一个是 GitHub。
不幸的是,在这个项目“公开”到 GitHub 之前,一些大型 AI“知识库”类型的数据文件作为 CSV 文件添加到了存储库中;几个超过 GitHub 的大小限制(软限制 50MiB,硬限制 100MiB)
一旦我们意识到大小问题,我已经删除了文件并推送了 BZ2 文件,当文件编译到系统状态。
现在,内部存储库和 Sourceforge 已同步,但即使 HEAD 中没有文件,我也无法推送到 GitHub。
没有清除 .git 控制文件(啊,还有子模块!再次正确设置真是太痛苦了……)并重新开始,有没有办法像这样
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 文件。所以它可能 = HEAD。我还尝试添加一个无用的空文件,然后将其删除以“伪造”一些历史记录,以防万一问题,但没有帮助。)
我开始相信答案是否定的,我应该归档之前的存储库状态,硬着头皮重新开始,这确实不应该过多伤害任何人的感情,但这是一个麻烦。
【问题讨论】:
-
您可以从存储库中删除带有大文件的提交,并使用
-f将新版本推送到github