从 Git 历史记录中清除文件时 git filter-branch 的替代方案?
Alternatives to git filter-branch when purging a file from Git history?
问题:
我的团队有两个回购协议:
- 正在积极开发中的 Bitbucket 存储库,具有很长的提交历史。
- 一个较新的 Github 存储库,由另一个团队开发,大约一个月前创建的。由于某种原因,大多数 Bitbucket 存储库中的文件只是复制并推送到 Github 而不是分叉 Bitbucket 存储库,而没有来自 Bitbucket 的历史记录。
在我们淘汰 Bitbucket 之前,我希望能够将 Bitbucket 的更改合并到 Github。这是我第一次完成此操作,所以现在较新的 repo 引用旧版本的历史记录。
在我的机器上合并成功,但我无法将其推送到 Github,因为 Github 不接受大于 100MB 的文件。有趣的是,我不需要那个有问题的大文件,事实上它在我合并Bitbucket/develop
后就被删除了进入 Github/develop
。它不再出现在 HEAD
中并不重要,它在历史中,所以它被推到 Github.
解决方案?
- 从我们的 Bitbucket 存储库历史记录中清除有问题的文件 (https://help.github.com/articles/remove-sensitive-data/)。
- 强制推送所有受影响的分支到 Bitbucket。
- 重新运行从Bitbucket合并到Github。
这是一个相当冒险的前景。这意味着每个在旧 Bitbucket 存储库上工作的人都需要将他们所有的工作推到 Bitbucket。然后我会进行清除。 然后一旦我完成,他们可能不得不删除他们的整个本地克隆,然后重新获取它 。如果他们在此期间做了任何工作,他们将不得不在新的历史记录之上重新应用他们的提交。
问题:
有没有我没有考虑的替代方案?
我能否以某种方式从较新的存储库的历史记录中清除有问题的文件,同时仍然保持从一个存储库轻松合并到另一个存储库的能力?
简答:否
原因是每个 Git ref 都由 SHA1 哈希值标识,该哈希值相对于(除其他外)其内容是唯一的。
要删除该文件,您需要重写 提交,这需要强制推送。
问题:
我的团队有两个回购协议:
- 正在积极开发中的 Bitbucket 存储库,具有很长的提交历史。
- 一个较新的 Github 存储库,由另一个团队开发,大约一个月前创建的。由于某种原因,大多数 Bitbucket 存储库中的文件只是复制并推送到 Github 而不是分叉 Bitbucket 存储库,而没有来自 Bitbucket 的历史记录。
在我们淘汰 Bitbucket 之前,我希望能够将 Bitbucket 的更改合并到 Github。这是我第一次完成此操作,所以现在较新的 repo 引用旧版本的历史记录。
在我的机器上合并成功,但我无法将其推送到 Github,因为 Github 不接受大于 100MB 的文件。有趣的是,我不需要那个有问题的大文件,事实上它在我合并Bitbucket/develop
后就被删除了进入 Github/develop
。它不再出现在 HEAD
中并不重要,它在历史中,所以它被推到 Github.
解决方案?
- 从我们的 Bitbucket 存储库历史记录中清除有问题的文件 (https://help.github.com/articles/remove-sensitive-data/)。
- 强制推送所有受影响的分支到 Bitbucket。
- 重新运行从Bitbucket合并到Github。
这是一个相当冒险的前景。这意味着每个在旧 Bitbucket 存储库上工作的人都需要将他们所有的工作推到 Bitbucket。然后我会进行清除。 然后一旦我完成,他们可能不得不删除他们的整个本地克隆,然后重新获取它 。如果他们在此期间做了任何工作,他们将不得不在新的历史记录之上重新应用他们的提交。
问题:
有没有我没有考虑的替代方案? 我能否以某种方式从较新的存储库的历史记录中清除有问题的文件,同时仍然保持从一个存储库轻松合并到另一个存储库的能力?
简答:否
原因是每个 Git ref 都由 SHA1 哈希值标识,该哈希值相对于(除其他外)其内容是唯一的。
要删除该文件,您需要重写 提交,这需要强制推送。