Her deponun teslim alınmış farklı bir dalı olsa bile, bir .git klasörü olan tüm alt dizinlerden mevcut şubeden çekmek için harika bir çözüm buldum. Komut tek satırlıktır, farklı git komutlarını değiştirmeye yetecek kadar esnektir ve takma ad verilebilir.
Aşağıdakileri kopyalayıp yapıştırmanız yeterlidir:
find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;
Parçalamak:
find . -type d -maxdepth 2 -name .git
Geçerli dizinde (bul.) ".Git" (-name .git) adını taşıyan tüm dizinleri (-tipi) bulun, en fazla iki dizin derinliğine (1 yerine 2, çünkü aradığımız git repo klasöründeki git klasörü).
-exec sh -c
Aşağıdaki kabuk komutunu çalıştırın (exec sh -c)
'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'
Dizini ilk bağımsız değişkenle değiştirin (cd $ 0), ardından .git klasöründen (cd ..) ayrılmak için dizini bir düzey değiştirin, ardından git rev-parse ... çalıştırarak geçerli dalın HEAD commit.
{} \;
"{}", İlk bul komutundan aldığımız sonuç göreceli yoldur . ; komutu bitirmek için kullanılır.
Zsh üzerinde MacOS 10.14.6'da test edilmiştir. Olduğu gibi, yalnızca uzak ve yerel şubeler AFAIK olarak adlandırıldığında çalışır.
Durum almak için bunu değiştirebilirsiniz. Bunu daha esnek hale getirmek için argümanlar ekleyebileceğinizi umuyorum, ancak henüz denemedim.
hg mercurial
.