Git 无法访问子模块
Git Submodule not reachable
我有一个 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
明确添加不同的 URL,例如
git submodule add git@env2:group/bar.git
一个子模块是一个 url+一个 SHA1 引用。
您的镜像将镜像 SHA1 引用(一个 gitlink,父 Git 存储库中的特殊条目,已镜像)
但是由于子模块回购本身没有镜像...父回购可以引用在(非镜像)图像栏子模块回购中不存在的 SHA1。 (或者如果 bar 在镜像环境中根本不存在,那么对于任何 SHA1 来说它都是空的)
镜像父存储库必须能够引用可访问且最新的 bar 存储库。
与其尝试在本地更改它,不如检查像 url.<base>.insteadOf
这样的配置是否有效:目标是使用 git@env2
而不是 git@env1
,但不更改 git@env1
位于 .gitmodules
.
A clone --recursive
或 clone
后跟 git submodule update --init
将填充 bar
子模块。
作为变通方法,在 Jenkins 上,您可以:
- 让 Jenkins 进行结帐(栏为空)
- 作为第一个构建步骤,在
.gitmodules
上执行 sed
以更改柱的 url,正如下面 OP Anthony 所建议的
- 做一个
git submodule update --init
Git modules 的文档解释:
When cloning or pulling a repository containing submodules however, these will not be checked out by default; the init
and update
subcommands will maintain submodules checked out and at appropriate revision in your working tree.
在 ENV2
你必须 运行:
git submodule init
git submodule update
我有一个 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
明确添加不同的 URL,例如
git submodule add git@env2:group/bar.git
一个子模块是一个 url+一个 SHA1 引用。
您的镜像将镜像 SHA1 引用(一个 gitlink,父 Git 存储库中的特殊条目,已镜像)
但是由于子模块回购本身没有镜像...父回购可以引用在(非镜像)图像栏子模块回购中不存在的 SHA1。 (或者如果 bar 在镜像环境中根本不存在,那么对于任何 SHA1 来说它都是空的)
镜像父存储库必须能够引用可访问且最新的 bar 存储库。
与其尝试在本地更改它,不如检查像 url.<base>.insteadOf
这样的配置是否有效:目标是使用 git@env2
而不是 git@env1
,但不更改 git@env1
位于 .gitmodules
.
A clone --recursive
或 clone
后跟 git submodule update --init
将填充 bar
子模块。
作为变通方法,在 Jenkins 上,您可以:
- 让 Jenkins 进行结帐(栏为空)
- 作为第一个构建步骤,在
.gitmodules
上执行sed
以更改柱的 url,正如下面 OP Anthony 所建议的 - 做一个
git submodule update --init
Git modules 的文档解释:
When cloning or pulling a repository containing submodules however, these will not be checked out by default; the
init
andupdate
subcommands will maintain submodules checked out and at appropriate revision in your working tree.
在 ENV2
你必须 运行:
git submodule init
git submodule update