VCS(Git、Mercurial、SVN)に基づいてディレクトリに分類された一連のリポジトリがあります。 Subversionを使用すると、親ディレクトリでsvn update *
を実行でき、各ディレクトリをループして、各リポジトリを期待どおりに更新しました。 GitやMercurialはそうではありません。
それを実行するために実行できるbashスクリプトを思いついて、ディレクトリをループし、それぞれのgit pull
またはhg pull
をループします。私はbashスクリプトの経験があまりありません。
for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
再帰的にする必要がある場合:
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull" \;
これにより、現在のディレクトリの下のすべてのディレクトリに移動し、.gitディレクトリがあるサブディレクトリでgit pullを実行します(-maxdepth
で制限できます)。
GNU Parallel http:// www.gnu.org/software/parallel/がインストールされている場合、これを行うことができます:
cd ~/projects/git/; ls | parallel 'cd {} && git pull'
これは並行して実行されるため、Gitサーバーのネットワーク接続の一部が遅い場合、速度が向上する可能性があります。
GNU Parallelの紹介ビデオをご覧ください:詳細は http://www.youtube.com/watch?v=OpaiGYxkSuQ
これはうまくいくはずです
find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
それを行うにはrecursivefind
を使用せずにforloop
for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done