は自動的にこれを支援するgit submodule update
(またはgit pull
が行われるたびに呼び出される? git pullが自動的にサブモジュールを更新する方法はありますか?
git submodule update --init
、またはGitの別名を持ってする方法がある。
は自動的にこれを支援するgit submodule update
(またはgit pull
が行われるたびに呼び出される? git pullが自動的にサブモジュールを更新する方法はありますか?
git submodule update --init
、またはGitの別名を持ってする方法がある。
git config --global alias.pullall '!git pull && git submodule update --init --recursive'
の場合引数をgit pullに渡したい場合は、代わりに次のようにしてください:
git config --global alias.pullall '!f(){ git pull "[email protected]" && git submodule update --init --recursive; }; f'
はあなたが気をつけて – yoyo
エイリアスBallardは、完全に優れたソリューションです。そこに別のオプションを投げるために、単にgit submodule update [--init]
を実行するポスト・マージ・フックを使うこともできます。
Git 1.7.5からは、必要に応じて自動的にサブモジュールを自動的に更新するはずです。
は、[EDIT:コメントあたり:新しい1.7.5動作が自動的に彼ら(git submodule update
意味での)サブモジュールのための最新のコミットをフェッチが、ないに更新することです。したがって、この回答の情報は背景としては関連していますが、完全な回答ではありません。 1つのコマンドでサブモジュールをプルアップしたり更新するには別名が必要です。]
"オンデマンド"のデフォルトの動作は、サブモジュールのコミットを更新するコミットをフェッチするたびにサブモジュールを更新することです。すでにローカルクローンにあります。
フェッチするかしないか(私が前提とする1.7.5より前の動作)に更新することもできます。
この動作を変更するためのconfigオプションは、fetch.recurseSubmodules
です。
このオプションはブール値または
on-demand
に設定できます。
ブール値に設定すると、trueに設定するとサブモードに無条件に再帰し、falseに設定するとまったく再帰しないように、fetch
とpull
の動作が変更されます。on-demand
(デフォルト値)に設定すると、その親プロジェクトは、それがサブモジュールの参照の更新をコミット取得するとき、
fetch
とpull
のみ人口サブモジュールに再帰します。
参照:詳細については、
git config
man page (1.7.5)(または最新のgit config
man page)git fetch
man page (1.7.5)(または最新のgit fetch man page)。
git fetch --recurse-submodules[=yes|on-demand|no]
を使用するすべてのgitリポジトリ全体でこのエイリアスをしたい場合は、「--global gitの設定」を使用することを忘れないでください:答えは以下の説明のように、これはあなたがまだサブモジュールの更新を行う必要があり、自動的に変更をフェッチ - エイリアスの答えは正しいです。 – Artem
@Artemは正しいです。この回答は役に立ちますが、質問全体に対処するものではありません。この設定は 'git submodule update'ではなく' git fetch'を実行するだけです。 –
この回答は非常に欺瞞的です。 'git fetch'ではなく' git pull'と併用しても、このオプションは*フェッチを再帰的にするだけです。サブモジュール内でどのコミットがチェックアウトされたかはまったく変更されません。したがって、@Artemに書かれているように、 'git submodule update'はまだ必要です。代わりにgitのためのエイリアスの –
サブモジュールの更新を自動的に処理するgitコマンドのエイリアスを作成できます。あなたに以下を追加してください。bashrc
# make git submodules usable
# This overwrites the 'git' command with modifications where necessary, and
# calls the original otherwise
git() {
if [[ [email protected] == clone* ]]; then
gitargs=$(echo "[email protected]" | cut -c6-)
command git clone --recursive $gitargs
elif [[ [email protected] == pull* ]]; then
command git "[email protected]" && git submodule update --init --recursive
elif [[ [email protected] == checkout* ]]; then
command git "[email protected]" && git submodule update --init --recursive
else
command git "[email protected]"
fi
}
、あなたはaliasコマンドを介して、またはgit-(のgit - bettermodule) – idbrii
私は、これを行うにgitフックを使用して言及して驚いています!
だけで、関連するリポジトリのご.git/hooks
ディレクトリにpost-checkout
という名前のファイルとpost-merge
を追加し、それらのそれぞれに次のように置く:
#!/bin/sh
git submodule update --init --recursive
あなたはspecficallyあなたがこれを持っているしたいと仮定すると、エイリアスを求めたので、多くのリポジトリで、別名を作成してリポジトリの.git/hooks
に追加することができます。
で始まるパスでコマンドを作成することにより、gitのためにエイリアスを追加することができ、このグローバル設定にする方法はありますか?または、リポジトリをチェックアウトするときに自動的に取得するものですか? –
のgitの最新リリース、2.9は、(https://github.com/blog/2188-git-2-9-has-been-released# [hooksディレクトリは 'core.hooksPath'という名前の設定を追加]ましたgit-tidbits-gitbits-tidgits)については、 'git-config'のドキュメントを参照してください。 – taleinat
チェックアウト時に自動的に受け取ったものは検索しましたが、何も見つかりませんでした。ある情報源は、クライアントマシン上で任意のコードを実行するのにはむしろ簡単に使用できるので、これはセキュリティ上の問題で意図的にサポートされていないと述べています。 – taleinat
関連:http://stackoverflow.com/questions/1899792/why-is-git-submodule-update-not-automatic – philfreo
gitエイリアスがシェルエイリアスよりも好ましい理由は何ですか? – wnoise
gitエイリアスは "git"名前空間にコマンドをカプセル化しているのでいいです。すべてのgitコマンドが、独自の名前を持つ代わりに "git"で始まる理由を尋ねるかもしれません。 –