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