16

私はgitリポジトリのルートを持っています/git

次のようなさまざまな深さのパスがあります。

/git/project/project1/module1.git
/git/project/project1/module2.git
/git/project/project2/dev/module1.git
/git/library/libgit2.git
/git/library/jquery/jquery.git

git gc内部のすべてのリポジトリで再帰的に実行するにはどうすればよい/gitですか?

シェル スクリプトを使用してリポジトリを反復処理することをお勧めします。そのディレクトリが有効な git リポジトリでない場合は、実行しないでくださいgit gc

4

3 に答える 3

40

次のようなものを試すことができます:

find /git -name '*.git' -execdir sh -c 'cd {} && git gc' \;

*.gitこれにより、の下/gitで一致するすべてのディレクトリが検索され、その中にcd入って実行されますgit gc

于 2012-08-08T02:32:41.853 に答える
1

一部のシステム (つまり OSX) では、forループはスペースを区切り文字として扱い、スペースを含むディレクトリ名を分割します。これが正しく機能するためにIFS改行のみを使用するように設定し、完了したらデフォルトにリセットします。\n

oldIFS=$IFS; IFS=$'\n'; for line in $(find /git -name '*.git'); do (echo $line; cd $line; git gc); done; IFS=$oldIFS
于 2013-03-29T15:28:02.063 に答える