gpt4 book ai didi

跟踪远程分支的 Git 子模块

转载 作者:IT王子 更新时间:2023-10-29 01:28:48 28 4
gpt4 key购买 nike

我正在尝试使用 git 子模块将 10 多个存储库聚合到一个结构中以便于开发。

它应该克隆模块并 checkout 一个分支。相反,模块以分离头模式 check out 。

git clone git@github.com:org/global-repository.git
git submodule update —init
cd config-framework
git status

$git status
#HEAD detached at b932ab5
nothing to commit, working directory clean

gitmodules 文件似乎没问题

$cat .gitmodules 
[submodule "config-framework"]
path = config-framework
url = git@github.com:org/config-framework.git
branch = MY_BRANCH

我们希望默认 checkout MY_BRANCH 分支,而不是分离头。我们如何实现这一点?

最佳答案

子模块总是 detached HEAD mode 中 check out .

那是因为子模块将检查存储在 special entry in the index of the parent repo 中的 SHA1 .

另外,如果你想让子模块跟随你在 .gitmodules 中注册的分支,你需要:

git submodule update --init --remote

--remote 将生成一个 git fetch,并检查新的 HEAD
las,即使 checkout 也是提交,而不是分支(因为默认情况下子模块中没有本地分支),所以...回到分离的 HEAD 模式。
在“Git submodules: Specify a branch/tag”中查看更多信息。

你可以尝试(未测试)一个:

git submodule foreach 'git checkout -b $(git config -f /path/to/parent/repo/.gitmodules --get submodule.$path.branch)'

我利用了 git submodule foreach 可以访问“$path”这一事实,即相对于 super 项目的子模块目录的名称。


尝试为要自动 check out 的子模块指定一个分支(commit 23d25e4 对于 Git 2.0)......但它被逆转(commit d851ffb,2014 年 4 月 2 日)!
它可能很快就会出现,但不会在目前的实现中出现。

关于跟踪远程分支的 Git 子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19986075/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com