Gitサブモジュールを含むプロジェクトがあります。これはssh:// ... URLからのものであり、コミットAにあります。コミット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 mod
Cloning into mod...
user@host's 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://user@host/git/mod changes; submodule needs to change too.
$ git submodule init
Submodule 'mod' (ssh://user@host/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
、モジュールを追加して再度追加しているだけですが、これは原則として間違っており、実際には面倒です。
--remote
現時点では、新しい方が確実に優れたソリューションであり、この質問はサブモジュールに関するGithub Gistからリンクされているので、新しい読者には新しい答えを見てもらうほうが良いと思います。
hunter2
パスワードを使った素敵なタッチ:o)
--remote
オプションを介して組み込みが必要な機能を持っているので、おそらくそれをJasonの答えの「手動」アプローチではなく受け入れられた答えとしてマークすることは有用でしょうか?