Saya memiliki satu set repositori yang diurutkan ke dalam direktori berdasarkan VCS mereka (Git, Mercurial, SVN). Dengan Subversion saya dapat menjalankan svn update *
di direktori induk dan itu akan berulang melalui setiap direktori dan memperbarui setiap repositori seperti yang diharapkan. Itu tidak berlaku untuk Git atau Mercurial.
Saya ingin membuat skrip bash yang dapat saya jalankan untuk melakukan hal itu, mengulangi direktori dan salah satu git pull
atau hg pull
masing-masing. Saya hanya tidak memiliki banyak pengalaman bash scripting.
Jawaban:
sumber
Jika Anda membutuhkannya untuk menjadi rekursif:
Ini akan turun ke semua direktori di bawah yang saat ini, dan melakukan tarikan git pada subdirektori yang memiliki direktori .git (Anda dapat membatasi dengan
-maxdepth
).sumber
-execdir
jauh lebih baik di sini:find . -type d -name .git -execdir sh -c "pwd && git pull" \;
Jika Anda telah menginstal GNU Parallel http: // www.gnu.org/software/parallel/ Anda dapat melakukan ini:
Ini akan berjalan secara paralel sehingga jika beberapa koneksi jaringan server git lambat ini dapat mempercepat beberapa hal.
Tonton video intro untuk GNU Parallel untuk mempelajari lebih lanjut: http://www.youtube.com/watch?v=OpaiGYxkSuQ
sumber
ls */
untuk memastikan Anda memberikan masukan yang masuk akalcd
.Ini seharusnya bekerja
sumber
-maxdepth 1
bendera, ini adalah satu-satunya perintah yang saya temukan di banyak pencarian dan mencoba yang mengeksekusi perintah secara rekursif (di semua subdirektori, bukan hanya direktori satu tingkat ke bawah).Untuk melakukannya secara rekursif tanpa menggunakan
find
tetapiforloop
sumber