VCS'leri (Git, Mercurial, SVN) temelinde dizinlere ayrılmış bir dizi havuzum var. Subversion ile üst dizinde svn update *
komutunu çalıştırabilirdim ve her dizinde döngü kurar ve her depoyu beklendiği gibi güncellerdi. Git veya Mercurial için durum böyle değil.
Dizinleri ve her birinde git pull
veya hg pull
döngüsünü tam olarak yapmak için çalıştırabileceğim bir bash betiği ile gelmek istiyorum. Sadece çok fazla basma betiği tecrübem yok.
for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
Özyinelemeli olması gerekirse:
find . -type d -name .git -exec sh -c "cd \"{}\"/../ && pwd && git pull" \;
Bu, geçerli olanın altındaki tüm dizinlere iner ve .git dizini olan alt dizinlerde bir gitme işlemi gerçekleştirir (-maxdepth
ile sınırlayabilirsiniz).
Eğer GNU Paralel http: // www.gnu.org/software/parallel/ kurulu ise bunu yapabilirsiniz:
cd ~/projects/git/; ls | parallel 'cd {} && git pull'
Bu paralel olarak çalışır, bu yüzden git sunucuların ağ bağlantılarının bazıları yavaşsa bu durumları hızlandırabilir.
GNU için giriş videosunu izleyin _ Daha fazla bilgi için Paralel: http://www.youtube.com/watch?v=OpaiGYxkSuQ
Bu çalışmalı
find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
Bunu yapmak için özyinelemelifind
kullanmadan, ancak forloop
kullanmadan
for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done