ฉันพบวิธีแก้ปัญหาที่ยอดเยี่ยมสำหรับการดึงจากสาขาปัจจุบันจากไดเรกทอรีย่อยทั้งหมดที่มีโฟลเดอร์. git แม้ว่าแต่ละ repo จะมีการเลือกสาขาที่แตกต่างกัน คำสั่งเป็นแบบซับเดียวมีความยืดหยุ่นเพียงพอที่จะแก้ไขสำหรับคำสั่ง git ที่แตกต่างกันและสามารถใช้นามแฝงได้
เพียงคัดลอกและวางข้อมูลต่อไปนี้:
find . -type d -maxdepth 2 -name .git -exec sh -c 'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)' {} \;
ทำลายมันลง:
find . -type d -maxdepth 2 -name .git
ค้นหาไดเร็กทอรีทั้งหมด (-type d) ในไดเร็กทอรีปัจจุบัน (find.) ที่มีชื่อ ".git" (-name .git) โดยมองหาไดเร็กทอรีสูงสุดสองไดเร็กทอรีลึก (2 แทนที่จะเป็น 1 เนื่องจากเรากำลังมองหา git โฟลเดอร์ภายในโฟลเดอร์ git repo)
-exec sh -c
รันคำสั่งเชลล์ต่อไปนี้ (exec sh -c)
'cd $0 && cd .. && git pull origin $(git rev-parse --abbrev-ref HEAD)'
เปลี่ยนไดเร็กทอรีเป็นอาร์กิวเมนต์แรก (cd $ 0) จากนั้นเปลี่ยนไดเร็กทอรีหนึ่งระดับขึ้นไปเพื่อออกจากโฟลเดอร์. git (cd .. ) จากนั้นทำ git pull origin ในขณะที่ระบุสาขาโดยเรียกใช้ git rev-parse ... สำหรับสาขาปัจจุบัน HEAD คอมมิต
{} \;
"{}" คือเส้นทางสัมพัทธ์ของผลลัพธ์ที่เราได้รับจากคำสั่งค้นหาเริ่มต้น ที่; ใช้เพื่อสิ้นสุดคำสั่ง
ทดสอบบน MacOS 10.14.6 บน zsh ตามที่เป็นอยู่จะใช้งานได้เฉพาะเมื่อสาขาที่อยู่ห่างไกลและในพื้นที่มีชื่อเหมือนกันว่า AFAIK
คุณสามารถแก้ไขสิ่งนี้เพื่อรับสถานะ ฉันคาดว่าคุณอาจจะสามารถเพิ่มข้อโต้แย้งเพื่อให้มีความยืดหยุ่นมากขึ้น แต่ฉันยังไม่ได้ลอง
hg mercurial
สำหรับ