回答:
サブモジュールディレクトリを入力します。
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
問題のサブモジュール(プロジェクトA)への参照を更新するコミットが(プロジェクトBで)プルされた場合にのみ、フラグなしで機能します。HEAD
proj Aのリモート追跡ブランチのを参照するようにproj Bを更新するには、git submodule update --remote --merge
以下のPaul Hatcherの回答に示すように実行する必要があります。
git 1.8からできること
git submodule update --remote --merge
これにより、サブモジュールが最新のリモートコミットに更新されます。次に、変更をコミットして、親リポジトリのgitlinkを更新する必要があります
git commit
そして、これなしで変更をプッシュします。サブモジュールを指すSHA-1 IDは更新されないため、変更は他の誰にも表示されません。
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
、それぞれ。
他のいくつかの回答は、サブモジュールのディレクトリ内でのマージ/コミットを推奨していますが、IMOは少し乱雑になる可能性があります。
リモートサーバーに名前が付けられorigin
ていてmaster
、サブモジュールのブランチが必要だとすると、私は次のように使用する傾向があります。
git submodule foreach "git fetch && git reset --hard origin/master"
注:これは、各サブモジュールのハードリセットを実行します-あなたはこれをしたくない場合は、変更することができます--hard
に--soft
。
Andyの応答は$ pathをエスケープすることでうまくいきました:
git submodule foreach "(git checkout master; git pull; cd ..; git add \$path; git commit -m 'Submodule Sync')"
'$path'
git submodule update
場合は、誰かがprojAを更新したときに行うことができます(新しいコミットIDを取得します)。