如何引用git子模块的备用URL,具体取决于我克隆super repo的位置?
我有一个工作流程,需要能够从一个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子模块的备用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将有关子模块的信息存储在以下位置:
/.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来解决这个问题