web-dev-qa-db-ja.com

Gitはサブモジュールを再帰的に更新します

私のプロジェクトの構造

ProjectA
-FrameworkA (submodule)
--Twig (submodule of FrameworkA)

サブモジュールを再帰的に更新するにはどうすればよいですか?私はすでにいくつかのgitコマンドを試しました(ProjectAルートで)

git submodule foreach git pull Origin master

または

git submodule foreach --recursive git pull Origin master

twigのファイルをプルすることはできません。

244
complez
git submodule update --recursive

また、初期化されていないサブモジュールを初期化するための--initオプションを使用することをお勧めします。

git submodule update --init --recursive

注:古いバージョンのGitでは、--initオプションを使用すると、初期化済みのサブモジュールが更新されない場合があります。その場合、--initオプションなしでコマンドを実行する必要があります。

506
drewag

私が使う方法は:

git submodule update --init --recursive
git submodule foreach --recursive git fetch
git submodule foreach git merge Origin master
25

サブモジュールのデフォルトのブランチがnotmasterであることが起こるかもしれないので(これは私の場合はよく起こります)、これは私がGitサブモジュールのフルアップグレードを自動化する方法です:

git submodule init
git submodule update
git submodule foreach 'git fetch Origin; git checkout $(git rev-parse --abbrev-ref HEAD); git reset --hard Origin/$(git rev-parse --abbrev-ref HEAD); git submodule update --recursive; git clean -dfx'
15

最近のGit(私はv2.15.1を使っています)では、次のものが上流のサブモジュールの変更を再帰的にサブモジュールにマージします。

git submodule update --recursive --remote --merge

初期化されていないサブモジュールを初期化するために--initを追加し、マージの代わりにリベースしたい場合は--rebaseを使用することができます。

後で変更をコミットする必要があります。

git add . && git commit -m 'Update submodules to latest revisions'
10
mrts