我需要经常碰撞存储库的子模块。我的一些子模块使用分支master
,有些使用development
。现在我只知道如何使用git submodule foreach git pull origin BRANCHNAME
正确地修改版本。然后当我到达使用相反分支的分支时,这将失败并退出。例如,如果我用master运行它,我会得到以下错误导致命令退出。
fatal: Couldn't find remote ref master
Stopping at 'submodules-dir/repo-that-uses-development-branch'; script
returned non-zero status.
有没有办法git submodule
只能进入一个分支,这样我就可以一次拉下一个分支变化?或者有没有办法过滤掉分支名称,这样git submodule foreach git pull origin
只会拉出当前用于每个子模块的分支。
答案 0 :(得分:0)
每个子模块都是一个普通的存储库。特别之处在于它通常处于分离的HEAD 模式,即不在任何分支上。
但是,您可以record a branch name for each submodule in that submodule's superproject:
-b
,--branch
要添加为子模块的存储库的分支。分支的名称是 在
submodule.<name>.branch
.gitmodules
中记录为update --remote
。一个特殊的价值。用于表示名称 子模块中的分支应该与 当前存储库中的当前分支。
然后您可以运行git submodule update --remote
:
此选项仅对更新命令有效。不使用超级项目记录的SHA-1来更新子模块,而是使用子模块的远程跟踪分支的状态。使用的远程是分支的远程(
branch.<name>.remote
),默认为origin
。使用的远程分支默认为master
,但可以通过在submodule.<name>.branch
或.gitmodules
中设置.git/config
选项来覆盖分支名称(优先.git/config
)。
(旁白:这意味着,如果您git config
超级项目中的特定分支,则会覆盖.gitmodules
文件中保存的默认配置。.gitmodules
文件,因为它是普通版本控制的文件,在超级项目中运行并存在于任何新的克隆上,而.git/config
设置特定于当前的超级项目克隆。)
适用于任何受支持的更新程序(
--checkout
,--rebase
等)。唯一的变化是目标SHA-1的来源。例如...... [snip]
(有关详细信息和示例,请参阅the linked documentation)。