Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
git:如何签出特定子模块上的特定(最新)版本(使用git子模块…)_Git_Git Submodules - Fatal编程技术网

git:如何签出特定子模块上的特定(最新)版本(使用git子模块…)

git:如何签出特定子模块上的特定(最新)版本(使用git子模块…),git,git-submodules,Git,Git Submodules,所以我有一个回购协议,里面有一堆子模块。我只想更新其中一个,但我想更新到最新的提交,我知道它位于名为origin/mybranch的分支的顶端。我要更新的子模块是mysubmodule(例如) 首先,我尝试了这个: git submodule update --remote -- mysubmodule 这是一个灾难,因为它似乎签出了最新的origin/master分支(已经很旧了) 所以我读了一些git文档,这似乎是默认行为-足够公平 但是如何签出具有分支来源/mybranch的远程提交

所以我有一个回购协议,里面有一堆子模块。我只想更新其中一个,但我想更新到最新的提交,我知道它位于名为origin/mybranch的分支的顶端。我要更新的子模块是mysubmodule(例如)

首先,我尝试了这个:

git submodule update --remote -- mysubmodule 
这是一个灾难,因为它似乎签出了最新的origin/master分支(已经很旧了)

所以我读了一些git文档,这似乎是默认行为-足够公平

但是如何签出具有分支来源/mybranch的远程提交

我试过这样的方法:

git submodule update --remote --checkout mybranch -- mysubmodule 
git submodule update --remote --checkout origin/mybranch -- mysubmodule 

但是我还没有弄明白这一点:(

您可以为您的子模块设置
分支
选项,以便跟踪您希望更新到的子模块分支。这意味着
.gitmodules
文件中的更改

git config -f .gitmodules submodule.<path>.branch <branch>
设置好后,下次运行子模块更新--remote…,在子模块中,git将签出分支指向的提交(分支上的最新提交)。

这可以在添加子模块时设置:

git submodule add -b <branch> <repository> [<path>]
git子模块添加-b[]

试试
cd-mysubmodule;git-checkout-origin/mybranch
@ElpieKay啊,我很抱歉想用
git-sumbodule…
来做这件事。我知道我可以将cd放入子模块并执行正常的git命令:)
git子模块
没有这样的命令。如果你能直接将
cd
放入dir并在那里运行
git
,为什么要这样做呢?@NilsWerner我正在运行一个批处理函数,在每个项目的顶层运行一个命令。所以我想要一个命令,可以从项目的顶层更新我的子模块。。。这就是为什么它应该。。就为了我:)。。。但如果这不可能,那么这是一个完全有效的假设answer@code_fodder由于在脚本中使用cd不是一种好的做法,因此可以从项目的顶层使用
git--git dir=mysubmodule/.git checkout origin/mybranch
git submodule add -b <branch> <repository> [<path>]