Answers:
输入子模块目录:
cd projB/projA
从项目A中提取仓库(不会更新项目B的父项的git状态):
git pull origin master
返回根目录并检查更新:
cd ..
git status
如果子模块之前已更新,它将显示如下内容:
# Not currently on any branch.
# Changed but not updated:
# (use "git add ..." to update what will be committed)
# (use "git checkout -- ..." to discard changes in working directory)
#
# modified: projB/projA (new commits)
#
然后,提交更新:
git add projB/projA
git commit -m "projA submodule updated"
更新
正如@paul指出的那样,从git 1.8开始,我们可以使用
git submodule update --remote --merge
将子模块更新为最新的远程提交。在大多数情况下会很方便。
git push
吗
git push <remote> <branch>
,例如git push origin dev
。
git submodule update
仅在提交(在项目B中)将提交更新为相关子模块(项目A)的引用的提交时,才没有标志。要更新项目B以引用项目HEAD
A的远程跟踪分支,您将需要执行git submodule update --remote --merge
以下Paul Hatcher的回答所示的操作。
从git 1.8开始
git submodule update --remote --merge
这会将子模块更新为最新的远程提交。然后,您需要提交更改,以便更新父存储库中的gitlink
git commit
然后推送更改,因为没有此更改,指向子模块的SHA-1标识将不会更新,因此其他任何人都看不到更改。
git commit
其他所有人仍然看不到它。On branch master
Your branch is up-to-date with 'origin/master'.
Changes not staged for commit:
modified: SubmoduleA (new commits)
modified: SubmoduleB (new commits)
git add
在提交之前,必须暂存已更新的子模块。
如果更新子模块并提交给它,则需要转到包含的或更高级别的存储库,然后在其中添加更改。
git status
将显示如下内容:
modified:
some/path/to/your/submodule
子模块不同步的事实也可以从
git submodule
输出将显示:
+afafaffa232452362634243523 some/path/to/your/submodule
加号表示您的子模块指向顶级仓库期望它指向的位置的前面。
只需添加此更改:
git add some/path/to/your/submodule
并提交:
git commit -m "referenced newer version of my submodule"
上推更改时,请确保先上推子模块中的更改,然后再上推外部仓库中的参考更改。这样,更新的人将始终能够成功运行
git submodule update
有关子模块的更多信息,请参见http://progit.org/book/ch6-6.html。
+
在运行时未看到git submodule
,请确保已初始化并导入了子模块。用于的命令分别是git submodule init
和git submodule update
。
单行版
git submodule foreach "(git checkout master; git pull; cd ..; git add '$path'; git commit -m 'Submodule Sync')"
其他一些答案建议在子模块的目录中合并/提交,这可能会使IMO变得有些混乱。
假设远程服务器已命名,origin
并且我们想要master
子模块的分支,则我倾向于使用:
git submodule foreach "git fetch && git reset --hard origin/master"
注意:这将在每个子模块上执行硬重置-如果您不希望这样做,则可以更改--hard
为--soft
。
安迪的回应通过转义$ path为我工作:
git submodule foreach "(git checkout master; git pull; cd ..; git add \$path; git commit -m 'Submodule Sync')"
'$path'
git submodule update
在其他人更新projA时进行操作(您将获得一个新的提交ID)。