最佳答案
我有一个带有Git子模块的项目。它来自ssh://… URL,并且在提交A上。Commit B已被推送到该URL,我希望子模块检索提交并更改它。
现在,我的理解是git submodule update
应该这样做,但它没有。它什么都不做(没有输出,成功退出代码)。这是一个例子:
$ mkdir foo$ cd foo$ git init .Initialized empty Git repository in /.../foo/.git/$ git submodule add ssh://user@host/git/mod modCloning into mod...user@host's password: hunter2remote: Counting objects: 131, done.remote: Compressing objects: 100% (115/115), done.remote: Total 131 (delta 54), reused 0 (delta 0)Receiving objects: 100% (131/131), 16.16 KiB, done.Resolving deltas: 100% (54/54), done.$ git commit -m "Hello world."[master (root-commit) 565b235] Hello world.2 files changed, 4 insertions(+), 0 deletions(-)create mode 100644 .gitmodulescreate mode 160000 mod# At this point, ssh://user@host/git/mod changes; submodule needs to change too.$ git submodule initSubmodule 'mod' (ssh://user@host/git/mod) registered for path 'mod'$ git submodule update$ git submodule syncSynchronizing submodule url for 'mod'$ git submodule update$ man git-submodule$ git submodule update --rebase$ git submodule update$ echo $?0$ git status# On branch masternothing to commit (working directory clean)$ git submodule update mod$ ...
我还尝试了git fetch mod
,它似乎做了一个获取(但不可能,因为它没有提示输入密码!),但是git log
和git show
否认存在新的提交。到目前为止,我刚刚rm
-ing模块并重新添加它,但这在原则上是错误的,在实践中也是乏味的。