Bri*_*n D 3 git git-submodules
最初添加子模块时,我指定了一个特定的分支,如.gitmodule文件所示:
[submodule "externals/grpc/grpc"]
path = externals/grpc/grpc
url = git@github.com:me/grpc.git
branch = release-1.0
Run Code Online (Sandbox Code Playgroud)
我想更改为我的子模块的master分支,所以我将分支.gitmodules从更改release-1.0为master,并且很好地,只是从父git树中删除了该子模块:
cd $submodules
rm -rf grpc
cd $gitroot
git submodule sync
git submodule update --init --recursive
Run Code Online (Sandbox Code Playgroud)
现在,当我返回子模块时,它仍然是从release-1.0分支上的提交而不是最新的主提交中检出的。
我缺少什么步骤来切换子模块的分支?
wor*_*cle 31
自 v2.22(2019 年第 3 季度)起(感谢评论中的 @VonC)
假设你有子模块xyz,.gitmodules看起来像
$ cat .gitmodules
[submodule "xyz"]
path = xyz
url = git@git.com:xyz.git
branch = main
Run Code Online (Sandbox Code Playgroud)
你可以用以下命令检查它
$ git config --file=.gitmodules -l
submodule.xyz.path=xyz
submodule.xyz.url=git@git.com:xyz.git
submodule.xyz.branch=main
Run Code Online (Sandbox Code Playgroud)
现在你想引用分支v1.0.0,xyz你可以运行
git submodule set-branch -b v1.0.0 xyz
Run Code Online (Sandbox Code Playgroud)
然后运行全新更新
git submodule sync
git submodule update --init --recursive --remote
Run Code Online (Sandbox Code Playgroud)
上面的答案(@milgner)对我不起作用(git版本2.17.0)。也许我做错了什么。
以下是对我有用的:
nano .gitmodules # substitute the needed branch here
git submodule update submodule_name # update the submodule
git add .gitmodules && git commit -m 'some comment' # add and commit
git submodule status # check that changes have been applied
Run Code Online (Sandbox Code Playgroud)
如果您想切换到以前从未跟踪过的分支。
更改 中的分支后.gitmodules,请执行以下操作:
git submodule update --init --recursive --remote
cd submodule_name
git checkout new_branch_name
Run Code Online (Sandbox Code Playgroud)
进入子模块所在的目录以及git checkout正确的分支/提交。然后,再向上一个级别,并git add和git commit目录。这将使用正确的提交检入子模块。
并且不要忘记git submodule update --recursive在更新其他客户端后在它们上运行。