2012-01-12 20 views
5

指定されたディレクトリの下にあるどのサブフォルダがgitプロジェクトであるかを判断する方法があるかどうかを知りたいと思います。その後、これらのgitプロジェクトのどれを 'git fetch'などで更新する必要があるのか​​を確認します。gitディレクトリの更新を再帰的にチェックする

例えば、自分のホームフォルダにdevelopmentというフォルダがあります。このフォルダには、約10%のgitを使ってさまざまなプロジェクトが保存されています。プロジェクトの更新を個別にチェックするのではなく、開発ディレクトリ内のすべてのgitフォルダの更新を確認するコマンドを実行できるようにしたいと考えています。

競合していないプロジェクトを更新することもできればいいです。

答えて

3

一つの方法は、以下のコマンドである:

find . -name '.git' | xargs -n 1 dirname 

その後、各リポジトリ内のお好みのコマンドを実行するシェルスクリプトにこれを養うことができ、ディレクトリに変更するか、Gitの--git-dir--work-tree引数を使用してください。要するに

back=`pwd`; for d in `find . -type d -name .git` ; do cd "$d/.."; git pull ; cd $back ; done 
+0

xargsコマンドで-n引き数を説明できますか?私はマニュアルページを見ましたが、私はまだそれが実行する機能については不明です。 –

+0

@MrAxilus xargsは通常、指定されたコマンド(この場合はdirname)に対するコマンドラインパラメータとしてすべての出力を使用します。 -nは入力された1ワードのピースをすべて分割し、ピースごとにdirnameを呼び出します。 –

+0

@AlexandrPriymak、そうです。 findの-exec引数を使うほうが良いのではないでしょうか? –

1

アンドロイドのrepoをご覧ください。私は、それに特有のアンドロイドは何もないと思うので、あなたのニーズにそれを適応させることができます。あなたの現在のディレクトリの下にすべてのGitのリポジトリのリストを取得する

+0

ええと、正確に何をしているのですか? –

3

はそのため(ハック)ワンライナーです

またはシェルで次の別名を作成してください。

alias git-pull-all='find $(git rev-parse --show-toplevel 2> /dev/null) -name .git -type d -execdir git pull -v ";"' 

または~/.gitconfigです。

+0

ライフセーバー笑:) –

1

find . -name .git -execdir git pull -v ';' 

あなたはまた、(例えばupdate_src.sh)以下のスクリプトを作成することができます。

#!/bin/sh 
# Script to pull all git repositories to the recent version. 
ROOT=$(git rev-parse --show-toplevel 2> /dev/null) 
find "$ROOT" -name .git -type d -execdir git pull -v ';' 
ここ
関連する問題