如何碰撞特定的git子模块?

时间:2017-07-28 20:01:31

标签: git github

我需要经常碰撞存储库的子模块。我的一些子模块使用分支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只会拉出当前用于每个子模块的分支。

1 个答案:

答案 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)。