【问题标题】:How might one push a different git history to different repositories?如何将不同的 git 历史推送到不同的存储库?
【发布时间】: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

标签: git github


【解决方案1】:

这不是直接答案,但可能对您有用。使用 BFG

从 repo 中删除大文件,而不会破坏整个历史记录
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来实现

相关问题:

【讨论】:

  • 我最终不得不做这样的事情。
猜你喜欢
  • 1970-01-01
  • 2019-09-18
  • 2018-02-07
  • 2017-02-23
  • 1970-01-01
  • 1970-01-01
  • 2018-06-01
  • 2017-08-26
  • 1970-01-01
相关资源
最近更新 更多