(Git 2.22, Q2 2019 ได้เปิดตัวแล้วgit submodule set-branch --branch aBranch -- <submodule_path>
)
โปรดทราบว่าถ้าคุณมีที่มีอยู่ submodule ซึ่งไม่ได้ติดตามสาขาเลยแล้ว ( ถ้าคุณมี 1.8.2+ คอมไพล์ ):
ตรวจสอบให้แน่ใจ repo ผู้ปกครองรู้ว่า submodule ของมันติดตามสาขา:
cd /path/to/your/parent/repo
git config -f .gitmodules submodule.<path>.branch <branch>
ตรวจสอบให้แน่ใจว่า submodule ของคุณเป็นสาขาล่าสุดจริง ๆ :
cd path/to/your/submodule
git checkout -b branch --track origin/branch
# if the master branch already exist:
git branch -u origin/master master
(ที่มีต้นกำเนิด 'เป็นชื่อของระยะไกลต้นน้ำ repo submodule ที่ได้รับการโคลนจาก. ภายใน submodule ที่จะแสดงมัน. มักจะเป็น 'ต้นกำเนิด')
git remote -v
อย่าลืมที่จะบันทึกสถานะใหม่ของ submodule ของคุณใน repo แม่ของคุณ:
cd /path/to/your/parent/repo
git add path/to/your/submodule
git commit -m "Make submodule tracking a branch"
การปรับปรุงที่ตามมาสำหรับ submodule นั้นจะต้องใช้--remote
ตัวเลือก:
# update your submodule
# --remote will also fetch and ensure that
# the latest commit from the branch is used
git submodule update --remote
# to avoid fetching use
git submodule update --remote --no-fetch
โปรดทราบว่าด้วยGit 2.10+ (ไตรมาส 3 ปี 2559) คุณสามารถใช้ ' .
' เป็นชื่อสาขาได้:
ชื่อของสาขาจะถูกบันทึกเป็นsubmodule.<name>.branch
ในสำหรับ.gitmodules
ค่าพิเศษที่ใช้ในการแสดงให้เห็นว่าชื่อของสาขาใน submodule ที่ควรจะเป็นชื่อเดียวกับชื่อสาขาในปัจจุบันที่เก็บในปัจจุบันupdate --remote
.
แต่เป็นความเห็นโดยLubosD
ด้วยgit checkout
หากชื่อสาขาที่ต้องการติดตามคือ " .
" มันจะฆ่างานที่ไม่ได้รับอนุญาตของคุณ!
ใช้git switch
แทน
นั่นหมายถึง Git 2.23 (สิงหาคม 2019) หรือมากกว่า
ดู " สับสนgit checkout
"
หากคุณต้องการอัพเดท submodules ทั้งหมดของคุณตามสาขา:
git submodule update --recursive --remote
โปรดทราบว่าผลที่ได้สำหรับแต่ละ submodule ปรับปรุงจะมักจะเป็นหัวเดี่ยวเป็นแดนคาเมรอนทราบในคำตอบของเขา
( Clintmบันทึกไว้ในความคิดเห็นที่ถ้าคุณเรียกใช้git submodule update --remote
และ sha1 ที่ได้นั้นเหมือนกับสาขาที่ submodule เปิดอยู่มันจะไม่ทำอะไรเลยและปล่อยให้ submodule ยังคง "อยู่ที่สาขานั้น" และไม่อยู่ในสถานะผู้นำเดี่ยว )
เพื่อให้แน่ใจว่าสาขานั้นเช็คเอาท์จริง (และที่จะไม่แก้ไข SHA1 ของรายการพิเศษที่เป็นตัวแทนของ submodule สำหรับผู้ปกครอง repo) เขาแนะนำ:
git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; git switch $branch'
แต่ละ submodule จะยังคงอ้างอิง SHA1 เดียวกัน แต่ถ้าคุณทำคอมมิทใหม่คุณจะสามารถผลักดันมันได้เพราะจะมีการอ้างอิงโดยสาขาที่คุณต้องการให้ submodule ติดตาม
หลังจากนั้นกดภายใน submodule อย่าลืมกลับไปที่ repo parent เพิ่มกระทำและกด SHA1 ใหม่สำหรับ submodules ที่แก้ไขแล้ว
หมายเหตุการใช้ของ$toplevel
แนะนำในการแสดงความคิดเห็นโดยอเล็กซานเด Pogrebnyak
$toplevel
เป็นที่รู้จักใน git1.7.2 พฤษภาคม 2010: กระทำ f030c96
มันมีเส้นทางที่แน่นอนของไดเรกทอรีระดับบนสุด (ที่ไหน.gitmodules
)
dtmland
เพิ่มในความคิดเห็น :
สคริปต์ foreach จะล้มเหลวในการชำระเงิน submodules ที่ไม่ได้ติดตามสาขา
อย่างไรก็ตามคำสั่งนี้ให้ทั้งคู่:
git submodule foreach -q --recursive 'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; [ "$branch" = "" ] && git checkout master || git switch $branch' –
คำสั่งเดียวกัน แต่อ่านง่ายกว่า:
git submodule foreach -q --recursive \
'branch="$(git config -f $toplevel/.gitmodules submodule.$name.branch)"; \
[ "$branch" = "" ] && \
git checkout master || git switch $branch' –
umläuteปรับแต่งคำสั่งdtmlandด้วยเวอร์ชันที่เรียบง่ายในความคิดเห็น :
git submodule foreach -q --recursive 'git switch $(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
หลายบรรทัด:
git submodule foreach -q --recursive \
'git switch \
$(git config -f $toplevel/.gitmodules submodule.$name.branch || echo master)'
ก่อนที่ Git 2.26 (ไตรมาสที่ 1 ปี 2020) การดึงข้อมูลที่ได้รับการบอกให้เรียกการอัปเดตซ้ำ ๆ ใน submodules ย่อมก่อให้เกิดการส่งออกรีมอย่างหลีกเลี่ยงไม่ได้และมันก็ยากที่จะสังเกตเห็นข้อความผิดพลาด
คำสั่งที่ได้รับการสอนให้ submodules การระบุว่ามีข้อผิดพลาดในตอนท้ายของการดำเนินการ
ดูกระทำ 0222540 (16 มกราคม 2020) โดยเอมิลี่ Shaffer (nasamuffin
)
(ผสานโดยJunio C Hamano - gitster
- in b5c71cc , 05 Feb 2020)
fetch
: เน้นความล้มเหลวในระหว่างการดึงข้อมูล submodule
ลงชื่อออกโดย: Emily Shaffer
ในกรณีที่การดึงข้อมูล submodule ล้มเหลวเมื่อมี submodule จำนวนมากข้อผิดพลาดจากการดึงข้อมูล submodule ที่ล้มเหลวจะถูกฝังอยู่ภายใต้กิจกรรมบน submodule อื่น ๆ หากมีการดึงข้อมูลมากกว่าหนึ่งfetch-by-oid
ครั้ง โทรออกความล้มเหลวในช่วงปลายเพื่อให้ผู้ใช้ทราบว่าสิ่งที่ผิดพลาดและที่
เพราะfetch_finish()
เป็นเพียงการเรียกพร้อมกันโดยrun_processes_parallel,
mutexing submodules_with_errors
ไม่จำเป็นต้องไปรอบ ๆ