从Git历史记录中清除文件时git filter-branch的替代方法?

时间:2015-12-01 02:04:30

标签: git github bitbucket

问题:

我的团队有两个回购:

  • 正在积极开发的Bitbucket仓库,具有较长的提交历史。
  • 一个较新的Github回购,由另一个团队开发,一个月前创建。由于某些原因大部分来自Bitbucket仓库的文件被复制并被推送到Github而没有来自Bitbucket的历史,而不是分配Bitbucket仓库。

在我们退休Bitbucket之前,我希望能够将Bitbucket的更改合并到Github。我刚刚完成第一次这样做,所以现在新的回购引用了旧版的历史。

合并在我的机器上成功,但我无法将其推送到Github,因为Github不会接受文件> 100MB。热闹的部分是我不需要违规的大文件,事实上它被删除就在我将Bitbucket/develop合并到Github/develop之后。它在HEAD中不再存在并不重要,它在历史中,所以它被推送到Github。

解?

这是一个风险很大的前景。这意味着每个处理旧Bitbucket回购的人都需要将他们所有的工作推到Bitbucket。然后我会进行清洗。 然后,一旦我完成,他们将不得不删除他们的整个本地克隆,并重新获得它。如果他们在此期间做任何工作,他们将不得不在新历史的基础上重新提交他们的提交。

问题:

有没有其他我不考虑的选择? 我可以以某种方式从较新的仓库历史中清除违规文件,同时仍然能够轻松地从一个仓库合并到另一个仓库吗?

1 个答案:

答案 0 :(得分:2)

简答:没有

原因是每个Git ref都由一个SHA1哈希标识,该哈希相对于(其中包括)其内容是唯一的。

要删除该文件,您需要重写提交,这需要强制推送。