使用git时如何避免丢失远程信息?

问题描述

我的目标是简化更新git镜像克隆的过程。

我有一个git仓库repo-A,由供应商提供 我在本地git中有一个git存储库repo-B

我能够克隆repo-A,将repo-B添加为远程服务器并推送到repo-B。使用此命令

git clone --mirror repo-A
git remote add  my-local-server repo-B
git push --mirror my-local-server

结果是repo-Brepo-A包含相同的分支,提交等。此时,我可以从repo-A获取代码并将其推送到repo-B

问题是,如果我将repo-B克隆到另一台计算机上。遥控器的配置丢失。

这意味着,如果我执行git remote -v,则仅存在指向repo-B链接

是否可以配置repo-B,以便即使在存在新的克隆远程存储库链接之后?

我的目标是能够做到

git clone repo-B
git fetch --all origin /* or the name of location repo-A is located */
git push --all my-local-server

我知道可以通过

实现类似的行为
git clone --mirror repo-A
git push --mirror repo-B

解决方法

是否可以配置repo-B,以便即使在存在新的克隆远程存储库链接后[to repo-A]?

否。

请记住,git clone的意思是:

  1. 创建一个新的空目录;
  2. 在新的空目录中运行git init
  3. 在新克隆中运行git remote add
  4. 如果/按照您提供给git config的选项的指示,在新克隆中运行git clone
  5. 在新克隆中运行git fetch;和
  6. 在新克隆中运行git checkout

只有第4步可以满足您的要求-第3步中的git remote add使得第5步可以从repo-B中获取-并且第4步仅服从您在命令行中提供的参数。

您有两个选择:

  1. 至少不要直接使用git clone。编写自己的程序,该程序运行git clone,检查新的克隆,然后根据需要运行git remote add。或者,
  2. 通过别名或添加适当的git clone选项的脚本使用-c,以便第4步设置一个遥控器。 git remote add由运行多个git config操作组成:具体地说,您必须设置remote.name.urlremote.name.fetch。因此,您可以使用git clone命令行来完成这些操作。

请注意,这两个都是非常相似的:真正的区别是您是从存储库B检索的内容中获取存储库A的URL,还是对其进行硬编码。如果您选择从存储库B检索的内容中获取URL,请记住git clone复制了所有(可访问的)提交,但没有分支:步骤6是在新克隆中创建分支的分支。您将需要在步骤5中获取的某些数据中对repo A的URL进行编码:可能是一些提交,可能是通过特殊编码的远程跟踪名称找到的(例如,repo-B中的分支名称在克隆中成为远程跟踪名称)。 ),或通过某些标签名称找到的某些数据。