0

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

我有repo-A一个供应商提供的 git 存储库 我有一个 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,以便即使在新的克隆远程存储库链接存在之后?

我的目标是能够做到

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
4

1 回答 1

1

是否可以配置 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 步可以做你想做的事——git remote add第 3 步是这样,第 5 步将从 repo-B 中获取——并且第 4 步只服从你在命令行上提供的参数。

你有两个选择:

  1. 不要使用git clone,至少不要直接使用。编写您自己的程序来运行git clone,检查新的克隆,然后git remote add根据需要运行。或者,
  2. Use git clonevia an alias or script that adds appropriate -coptions so that step 4 sets up a remote. git remote add包括运行几个git config操作:具体来说,您必须设置和。所以你可以用命令行来做这些。remote.name.urlremote.name.fetchgit clone

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

于 2020-10-28T22:47:06.427 回答