问题描述
我的目标是简化更新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-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
解决方法
是否可以配置repo-B,以便即使在存在新的克隆远程存储库链接后[to repo-A]?
否。
请记住,git clone
的意思是:
- 创建一个新的空目录;
- 在新的空目录中运行
git init
; - 在新克隆中运行
git remote add
; - 如果/按照您提供给
git config
的选项的指示,在新克隆中运行git clone
; - 在新克隆中运行
git fetch
;和 - 在新克隆中运行
git checkout
。
只有第4步可以满足您的要求-第3步中的git remote add
使得第5步可以从repo-B中获取-并且第4步仅服从您在命令行中提供的参数。
您有两个选择:
- 至少不要直接使用
git clone
。编写自己的程序,该程序运行git clone
,检查新的克隆,然后根据需要运行git remote add
。或者, - 通过别名或添加适当的
git clone
选项的脚本使用-c
,以便第4步设置一个遥控器。git remote add
由运行多个git config
操作组成:具体地说,您必须设置remote.name.url
和remote.name.fetch
。因此,您可以使用git clone
命令行来完成这些操作。
请注意,这两个都是非常相似的:真正的区别是您是从存储库B检索的内容中获取存储库A的URL,还是对其进行硬编码。如果您选择从存储库B检索的内容中获取URL,请记住git clone
复制了所有(可访问的)提交,但没有分支:步骤6是在新克隆中创建分支的分支。您将需要在步骤5中获取的某些数据中对repo A的URL进行编码:可能是一些提交,可能是通过特殊编码的远程跟踪名称找到的(例如,repo-B中的分支名称在克隆中成为远程跟踪名称)。 ),或通过某些标签名称找到的某些数据。