Git子模块无法访问

时间:2017-06-18 09:39:34

标签: git git-submodules

我有一个包含子模块的git存储库。这个git存储库也在一个单独的环境中镜像。但是,子模块git存储库未镜像。这两种环境无法相互通信。为了解释问题,我们可以说ENV1有子模块(bar)和git repo(foo)。 ENV2是git仓库(foo)的镜像,bar子模块未在ENV2

中镜像

我遇到的问题是在ENV2中,虽然bar目录存在但是它是空的。这是因为ENV2无法与ENV1交谈。有什么方法可以解决这个问题吗?我的目标是在ENV1中提交代码。我是否还要将bar子模块放在ENV2上并开始镜像它?如果是这样,子模块URL将如何根据环境而变化。含义:

ENV1我做:

git submodule add git@env1:group/bar.git

我是否必须明确添加ENV2的其他网址,例如

git submodule add git@env2:group/bar.git

2 个答案:

答案 0 :(得分:1)

子模块是url + SHA1引用。

您的镜像将镜像SHA1引用(gitlink,父Git仓库中的特殊条目,已镜像)

但是由于子模块repo本身没有镜像......父repo可以引用在(非镜像)图像栏子模块repo中不存在的SHA1。 (或者如果在镜像环境中根本不存在条形,则无论如何对任何SHA1都是空的)

镜像的父级仓库必须能够引用可访问且最新的条形仓库。

不要尝试在本地更改它,而是检查url.<base>.insteadOf之类的配置是否有用:目标是使用git@env2而不是git@env1,但不更改git@env1 }在.gitmodules

clone --recursiveclone后跟git submodule update --init将填充bar子模块。

作为解决方法,在Jenkins上,你可以:

  • 让詹金斯结账(酒吧空)
  • sed上的.gitmodules作为第一个构建步骤更改栏的网址,如下面OP Anthony所示
  • 执行git submodule update --init

答案 1 :(得分:0)

Git modules的文档解释了:

  

当克隆或拉出包含子模块的存储库时,默认情况下不会检出这些存储库; initupdate子命令将维护子模块,并在工作树中以适当的版本进行检查。

ENV2上你必须运行:

git submodule init
git submodule update