如何确保开发人员在迁移存储库后使用新的git remote

如何确保开发人员在迁移存储库后使用新的git remote,git,devops,githooks,git-remote,git-mirror,Git,Devops,Githooks,Git Remote,Git Mirror,关于迁移git repo的每个答案都说: git clone --mirror git@github/odlrepo.git git push --mirror git@github/newrepo.git 但没人说,之后该怎么办 如何强制开发人员使用newrepo 我提供的解决方案包括: git钩住了oldrepo,这将把更改推到newrepo(但如果开发人员一直同时推这两个,这似乎是自找麻烦) git钩子阻止提交并说“更改远程,我们现在使用的是newrepo 但也许有更好的解决方案?无

关于迁移git repo的每个答案都说:

git clone --mirror git@github/odlrepo.git
git push --mirror git@github/newrepo.git
但没人说,之后该怎么办

如何强制开发人员使用newrepo

我提供的解决方案包括:

  • git钩住了oldrepo,这将把更改推到newrepo(但如果开发人员一直同时推这两个,这似乎是自找麻烦)
  • git钩子阻止提交并说“更改远程,我们现在使用的是newrepo

但也许有更好的解决方案?

无需管理挂钩,您可以:

  • 以禁用任何推送功能
  • 清空主分支的内容,只留下一个
    自述文件
    ,它清楚地解释了情况,要求开发人员现在从新存储库克隆或推送到新存储库

AFAIK,阻止提交并告诉用户更改他们的远程URL是最好的方法。您可以为旧存储库编写一个
预推
钩子(假设它仍然处于活动状态)。您可以创建一个设置远程的
预推
钩子脚本。最好的方法应该是设置远程“源”“这也是一个默认远程名称,将覆盖大多数开发人员,除非开发人员将默认远程名称从
origin
更改为其他名称。这仍然不是万无一失的,但很可能会派上用场。@AsifKamranMalick哇!这可能吗?这似乎是一个很大的安全问题。预推挂钩能做多少?@ravenwing感谢您的提醒。我的错。原来,
预推
钩子是客户端钩子。所以这里运气不太好。根据我的经验,虽然它们在本地工作,但它们以远程名称和url作为参数。但同样,它们不是服务器端钩子。因此,您的最佳选择似乎是遵循iBug和VonC的建议,在旧的回购协议中实施分支保护规则。我认为您的第二个选项“git hook阻止提交并说“change remote,我们现在使用的是newrepo”是一个很好的选项。我会这么做。