SourceTree中的git submodule update在哪里?

44

我该如何在SourceTree中更新git子模块?

6个回答

41

我自己找不到答案,所以创建了一个自定义操作。前往“首选项”,“自定义操作”,并输入以下信息: (此示例为Mac电脑,您的git执行文件路径可能会有所不同。) git子模块更新自定义操作


6
您可能也想使用“submodule update --init --recursive”。如果已经执行了初始化操作,则添加“--init”是无害的,如果您刚刚克隆了一个带有子模块的仓库,则可能需要这样做。如果您没有子模块引用其他子模块,则“--recursive”是无害的,但如果有,则必须加上该选项。 - ctpenrose

23

只需双击子模块或左键单击并打开该模块enter image description here

进入子模块后,界面与任何git仓库相同,按下拉/获取以更新到头文件。然后就可以了。


3
你确定这个做的是git submodule update的事情吗?无论如何,我不想使用git fetch或者git pull(因为这会忽略包含仓库中指定的版本)。 - wnrph
好问题!!由于我来自Subversion,所以不知道“fetch”和“update”的区别。请看 https://answers.atlassian.com/questions/33274/sourcetree-updating-submodules-when-pulling-from-a-repository - Raymond Chenon
3
如果您询问我,这将检出最新版本,而不是检出在主要代码库中提交的版本。 - Ambidex
3
这正是我一直在寻找的内容,并且它也在文档中描述了。 "如果子模块中有新的更改,你希望在你的仓库中使用,你只需要打开子模块(双击),并且通过拉取、合并或手动检出不同的提交来检出/更新。完成这些步骤后,返回到父仓库,你会看到子模块上存在一个未提交的更改,这将在差异中显示跟踪提交的变化:"。 - GolezTrol
6
git submodule update的目标是切换到父存储库指定的版本。(这对于只想使用推荐子模块的消费者来说很好。) 另一方面,拉取操作将从上游存储库中获取最新版本。(如果您想要使用最新版本,不考虑父存储库指定的版本,或者想要在子模块上工作,那么这更好。) - joeytwiddle

10

这是版本:

在此输入图片描述

该命令假定您的sh.exe文件位于某个位置 - 具体取决于您如何设置SourceTree。

/c %LOCALAPPDATA%\Atlassian\SourceTree\git_local\bin\sh.exe --login -i -c "git submodule update"""

我不确定这是否是一个bug - 但在我使用的Sourcetree版本中(v1.6.14.0),我发现在末尾加上额外的引号对""是必需的,否则会存在额外的引号,导致不平衡的语句使得sh出错:

cmd "/c %LOCALAPPDATA%\Atlassian\SourceTree\git_local\bin\sh.exe --login -i -c "git submodule update""
sh: unexpected EOF while looking for matching `"'
sh: syntax error: unexpected end of file

Completed with errors, see above.

似乎不起作用,但这可能是因为SourceTree在整个参数字符串周围添加了额外的一对引号。 - GolezTrol

7

我正在使用 SourceTree v3.4.6,您可以通过菜单工具\选项启用它。 在这里输入图片描述

克隆时,您应该启用递归子模块在这里输入图片描述


仅限克隆...不拉取 - Tj3n
编辑:这个实际上也适用于拉动。我刚刚再次测试了一下。版本:3.4.15 - undefined

6
Isuru提供的链接中包含如何进行更新的步骤(查找“Change the submodule commit which your repository is tracking”)。
简而言之,在主仓库上,
  • 选择子模块下拉菜单
  • 双击要更新的子模块 - 您将转移到该子模块的焦点
  • 拉取(最新)或检出(特定提交)所需的更新
  • 返回到主存储库的选项卡
  • 主仓库中将存在一个未提交的更改(使用哪个子模块提交),
  • 提交并推送更改

基本上这就是你所需要的。 - Adi

0
从未暂存文件列表中,右键单击您想要更新的子模块,然后选择“放弃”。这将执行一个 `git submodule update`。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接