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

How to avoid losing remote information when using git?

我的 objective 是为了简化更新我的 git 镜像克隆的过程。

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

我能够克隆 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-B 包含与 repo-A 相同的分支、提交等。此时我可以从 repo-A 获取新代码并将其推送到 repo-B

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

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

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

我的objective是会做

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

Is it possible to configure repo-B so that even after a fresh clone remote repositories links [to repo-A] are present?

没有

记住,git clone 表示:

  1. 新建一个空目录;
  2. 运行 git init 在新的空目录中;
  3. 运行 git remote add 在新克隆中;
  4. 运行 git config 在新克隆 if/as 中由您提供给 git clone;
  5. 的选项引导
  6. 运行 git fetch 在新克隆中;和
  7. 运行 git checkout 在新克隆中。

只有第 4 步可以做你想做的事——第 3 步中的 git remote add 是为了让第 5 步从 repo-B 获取——而第 4 步只服从你在命令行上提供的参数。

你有两个选择:

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

请注意,这两者非常相似:真正的区别在于您是从从回购 B 检索到的内容中获得回购 A 的 URL,还是 hard-code。如果您选择从回购 B 检索到的内容中获取 URL,请记住 git clone 复制所有(可访问的) 提交 ,但没有 分支: 第 6 步是在新克隆中创建分支的步骤。您需要在步骤 5 中获取的某些数据中对 repo A 的 URL 进行编码:可能是一些提交,可能是通过特殊编码的 remote-tracking 名称(即 repo-B 中的分支名称变为remote-tracking 名称在你的克隆中),或者在一些数据中通过一些标签名称找到。