У меня есть проект с подмодулем Git. Это из URL-адреса ssh://... и находится на фиксации A. Commit B был нажат на этот URL-адрес, и я хочу, чтобы подмодуль извлекал фиксацию и менял ее.
Теперь я понимаю, что git submodule update
должен это делать, но это не так. Он ничего не делает (нет выхода, код выхода успеха). Вот пример:
$ mkdir foo
$ cd foo
$ git init .
Initialized empty Git repository in /.../foo/.git/
$ git submodule add ssh://[email protected]/git/mod mod
Cloning into mod...
[email protected] password: hunter2
remote: 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 .gitmodules
create mode 160000 mod
# At this point, ssh://[email protected]/git/mod changes; submodule needs to change too.
$ git submodule init
Submodule 'mod' (ssh://[email protected]/git/mod) registered for path 'mod'
$ git submodule update
$ git submodule sync
Synchronizing submodule url for 'mod'
$ git submodule update
$ man git-submodule
$ git submodule update --rebase
$ git submodule update
$ echo $?
0
$ git status
# On branch master
nothing to commit (working directory clean)
$ git submodule update mod
$ ...
Я также пробовал git fetch mod
, который, как представляется, выполняет выборку (но не может, потому что не запрашивает пароль!), но git log
и git show
отрицают наличие новых коммитов. До сих пор я только что был rm
-удалением модуля и повторным добавлением его, но в принципе это и неправильно, и утомительно на практике.