如何将不同的git历史记录推送到不同的存储库?

时间:2013-12-31 16:44:12

标签: git github

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。我还尝试添加一个无用的空文件,然后删除它以“伪造”某些历史记录,如果是问题,但它没有帮助。)

我开始相信答案是“不”,我应该归档先前的存储库状态,咬紧牙关,重新开始,这真的不应该伤害任何人的感情,但它是一个麻烦。

1 个答案:

答案 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

使用git-filter-branch

也可以实现此目的

相关问题: