各リポジトリに異なるブランチがチェックアウトされている場合でも、.gitフォルダーを持つすべてのサブディレクトリから現在のブランチからプルするための優れたソリューションを見つけました。このコマンドはワンライナーであり、さまざまなgitコマンドに合わせて変更できる柔軟性があり、エイリアスを設定できます。
以下をコピーして貼り付けるだけです。
find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;
それを分解する:
find . -type d -maxdepth 2 -name .git
「.git」(-name .git)という名前の現在のディレクトリ(find。)内のすべてのディレクトリ(-type d)を検索し、最大2つのディレクトリの深さ(1ではなく2)を検索します。 git repoフォルダー内のgitフォルダー)。
-exec sh -c
次のシェルコマンドを実行します(exec sh -c)
'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'
ディレクトリを最初の引数(cd $ 0)に変更し、ディレクトリを1レベル上に変更して.gitフォルダ(cd ..)を残し、現在のブランチに対してgit rev-parse ...を実行してブランチを指定しながらgitpulloriginを実行します。 HEADコミット。
{} \;
「{}」は、最初のfindコマンドから取得した結果の相対パスです。; コマンドを終了するために使用されます。
zsh上のMacOS10.14.6でテスト済み。現状では、リモートブランチとローカルブランチに同じ名前のAFAIKがある場合にのみ機能します。
これを変更してステータスを取得できます。これをさらに柔軟にするために引数を追加できるかもしれないと思いますが、私はまだ試していません。
hg mercurial
。