Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何引用git子模块的备用URL,具体取决于我克隆super repo的位置?_Git_Git Submodules - Fatal编程技术网

如何引用git子模块的备用URL,具体取决于我克隆super repo的位置?

如何引用git子模块的备用URL,具体取决于我克隆super repo的位置?,git,git-submodules,Git,Git Submodules,我有一个工作流程,需要能够从一个git服务器(server1)拉取多个repo,然后推送到另一个git服务器(server2)。server2驻留在没有Internet访问的网络上,一些Repo使用引用驻留在server1上的其他Repo的子模块 通常,当我递归地克隆超级repo(包含子模块的超级repo)时,它会从其原始源克隆子模块。但是,从server2克隆时,这不是一个选项,因为server2没有Internet访问权限 我的想法是将子模块推到server2上,并在从server2克隆超级

我有一个工作流程,需要能够从一个git服务器(server1)拉取多个repo,然后推送到另一个git服务器(server2)。server2驻留在没有Internet访问的网络上,一些Repo使用引用驻留在server1上的其他Repo的子模块

通常,当我递归地克隆超级repo(包含子模块的超级repo)时,它会从其原始源克隆子模块。但是,从server2克隆时,这不是一个选项,因为server2没有Internet访问权限

我的想法是将子模块推到server2上,并在从server2克隆超级repo时克隆这些版本。我如何在保持能力的同时实现这一点

i、 例如,假设server2上的所有repo与server1上的相同,我希望以下2个命令是等效的,即使server2网络上的生成计算机无法到达server1以递归地克隆子模块:

git clone——递归子模块

git clone——递归子模块 (回想一下,递归克隆子模块时,server2无法访问server1)


我曾考虑通过分支实现这一点,但这似乎会带来维护问题。

也许,在您的情况下,值得尝试以下操作。 Git将有关子模块的信息存储在以下位置:
/.Git/modules/config
。 配置文件应具有节

[remote "origin"]
url = <url to your submodule>
[远程“源站”]
url=
因此,您可以使用一些bash脚本,它将覆盖
server2
上的此设置,然后关闭子模块。但是,如果必须将其更改回,那么在从server1进行下一次拉取之后,将不会发生冲突

此外,在项目的根文件夹中还有
.gitmodules
文件,其中包含相同的子模块url信息。也许,仅仅修改这个文件就足够了,然后在克隆过程中它将引用新的子模块url。但是,在这种情况下,此文件的修改将被视为git的更改,b/c此文件受源代码管理


另一种选择是使用本地git服务器,它将通过本地网络为
server2
server1
提供。然后,它可以包含来自网络服务器的子模块分支,但是
server1
server2
将很好地从中获得子模块更新…

我最终将子模块URL更改为相对URL,并在我的开发机器上修复了它。我将尝试在明天的工作中部署此解决方案

我遇到的一个缺点是,由于正在实施的新命名约定,子模块repo在server2上具有不同的名称,这意味着server1上的相对名称与server2上的相对名称不匹配。我将通过重命名server1上的repo来解决这个问题