Tho*_*mas 5 git version-control git-submodules
我们有一个超级项目和一个包含在其中的子模块。两者都有相同的分支master, staging, featureBranch。
我希望超级项目master跟踪子模块,master超级项目staging跟踪子模块staging。
对于超级项目中的主人,它.gitmodules看起来像这样:
[submodule "submodule"]
path = submodule
url = http://fpr-dev/submodule.git
branch = master
Run Code Online (Sandbox Code Playgroud)
并在舞台上
[submodule "submodule"]
path = submodule
url = http://fpr-dev/submodule.git
branch = staging
Run Code Online (Sandbox Code Playgroud)
现在,当我在 master 上做一个时,git submodule我看到以下输出:
$ git submodule
+e3782f37b1ae23aa0d5537ef3061dfdfec70f77f submodule (heads/Staging)
Run Code Online (Sandbox Code Playgroud)
请注意,它说的是登台。但是当我在子模块中执行 git status 时,我看到:
$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
nothing to commit, working directory clean
Run Code Online (Sandbox Code Playgroud)
为什么会这样,我该如何解决?
现在,当我切换到staging并尝试拉 ( git.exe pull -v --progress "origin") 子模块时,出现以下错误:
You asked to pull from the remote 'origin', but did not specify
a branch. Because this is not the default configured remote
for your current branch, you must specify a branch on the command line.
Run Code Online (Sandbox Code Playgroud)
我想做的就是:
实现这种行为的最简单方法是什么?
当您运行时,git submodule它会显示您的子模块的正确提交 SHA,因为这是您在超级项目中设置的。该命令不会告诉您当前本地子模块代码引用的提交 SHA;它告诉你想要的超级项目想要参考。
不幸的是,您必须采取额外的步骤来告诉您的超级项目在本地提取特定的子模块代码。这是通过运行以下命令来完成的:
git submodule init
git submodule update
之后,您应该在本地子模块中看到正确的代码。唯一可以绕过这些额外命令的时候是第一次克隆存储库时。你可以这样称呼:
git clone <repo_name> --recursive
并且所有子模块都将在正确的提交 SHA 处检出。但是,一旦签出新分支,您就必须再次运行init和update命令。
要自动执行此行为,您可以创建一个要运行的脚本,而不是git checkout直接使用命令。该脚本可以接受分支名称,并且看起来像这样:
git checkout <branch_name>
git submodule init
git submodule update
| 归档时间: |
|
| 查看次数: |
3662 次 |
| 最近记录: |