我使用旧 The BFG 清除了我的 repo 的大文件历史记录并遵循描述的使用步骤。所以我现在有一个干净的裸仓库准备好被推回 GitHub。
生产目录是该存储库的克隆。
由于 HEAD 受到保护,这是否意味着在原则上,在推送到 GitHub 之后,我将能够 pull 入现有的产品克隆并获得“已经是最新的”。消息,然后我可以在必要时从该 prod repo 干净地推送回 GitHub?
或者如果我制作热生产模组以推送到 repo 协议(protocol),我会遇到麻烦吗? (这是一个非常古老的项目,里面有很多不好的做法。我有没有 git 技能的开发人员直接在 prod 中工作。)
最佳答案
好的,为了了解您的设置,您的存储库有 3 个副本:
- 您的本地副本,使用 BFG 清理
- GitHub 上的副本
- 生产 副本,我猜它位于某处的实时服务器上
您已准备好将清理后的本地历史推送到GitHub,但您想知道您需要对生产<采取什么最低限度的操作强>。我假设 local、GitHub 和 production 在您开始之前都已同步。
BFG does protect the 'contents' (特别是文件树)您的 HEAD 提交,但这并不意味着该提交的历史。虽然它保证提交中的文件不会改变,但 BFG 必须改变历史才能完成它的工作。因为 Git 小心地将历史视为(通常)不可更改,所以你不能只是 git pull
这些更改通常会进入您的生产副本——不同的历史记录会被 Git 注意到,然后被拒绝。您试图清除的所有垃圾也将被保留,如果您不小心,就有可能将其推回 GitHub。
取而代之的是获取更改,告诉 Git 明确强制每个本地分支历史记录到新的、清理过的版本:
$ git fetch origin *:* -f --update-head-ok
(--update-head-ok
标志是为了避免 Refusing to fetch into current branch
错误)
在那之后,您应该可以获取任何新的历史记录,如果需要的话,甚至可以将热门的生产模组推送回 GitHub。
关于git - 重写 git 历史后替换 Prod Repo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27734385/