it-swarm.asia

Alt Dizinler Arasında Döngü Yapma ve Her Birinde Komut Çalıştırma

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.

45
Bryan Veloso
for dir in ~/projects/git/*; do (cd "$dir" && git pull); done
76
jtimberman

Ö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).

21

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

7
Ole Tange

Bu çalışmalı

find . -maxdepth 1 -type d -name '.git' -exec sh -c 'cd "{}" && pwd && git pull' \;
3
mj41

Bunu yapmak için özyinelemelifind kullanmadan, ancak forloop kullanmadan

for dir in ~/projects/git/*/*/; do (cd "$dir" && git pull); done
0
loretoparisi