หากฉันแก้ไขโมดูลย่อยฉันสามารถส่งคอมมิตกลับไปยังจุดเริ่มต้นของโมดูลย่อยได้หรือไม่หรือต้องใช้การโคลน ถ้าโคลนฉันจะเก็บโคลนไว้ในที่เก็บอื่นได้หรือไม่?
หากฉันแก้ไขโมดูลย่อยฉันสามารถส่งคอมมิตกลับไปยังจุดเริ่มต้นของโมดูลย่อยได้หรือไม่หรือต้องใช้การโคลน ถ้าโคลนฉันจะเก็บโคลนไว้ในที่เก็บอื่นได้หรือไม่?
คำตอบ:
โมดูลย่อยไม่ใช่อะไรเลยนอกจากโคลนของ git repo ภายใน repo อื่นที่มีข้อมูลเมตาพิเศษบางอย่าง (รายการต้นไม้ gitlink, ไฟล์. gitmodules)
$ cd your_submodule
$ git checkout master
<hack,edit>
$ git commit -a -m "commit in submodule"
$ git push
$ cd ..
$ git add your_submodule
$ git commit -m "Updated submodule"
gh-pagesสาขาสำหรับเอกสารใน github repo :)
โปรดทราบว่าตั้งแต่ git1.7.11 ( [ประกาศ] Git 1.7.11.rc1และบันทึกประจำรุ่นมิถุนายน 2012) กล่าวถึง:
"
git push --recurse-submodules" เรียนรู้ที่จะเลือกดูประวัติของโมดูลย่อยที่เชื่อมโยงกับซุปเปอร์โปรเจ็กต์และผลักดันออกมา
อาจเสร็จสิ้นหลังจากแพทช์นี้และ--on-demandตัวเลือก:
recurse-submodules=<check|on-demand>::
ตรวจสอบให้แน่ใจว่าโมดูลย่อยทั้งหมดที่ใช้โดยการแก้ไขที่จะพุชนั้นมีอยู่ในสาขาการติดตามระยะไกล
- หาก
checkใช้ระบบจะตรวจสอบว่าโมดูลย่อยทั้งหมดที่คอมมิตที่เปลี่ยนแปลงในการแก้ไขที่จะพุชนั้นพร้อมใช้งานบนรีโมท
มิฉะนั้นการพุชจะถูกยกเลิกและออกโดยมีสถานะไม่ใช่ศูนย์- หาก
on-demandใช้โมดูลย่อยทั้งหมดที่เปลี่ยนแปลงในการแก้ไขที่จะพุชจะถูกพุช
หากออนดีมานด์ไม่สามารถผลักดันการแก้ไขที่จำเป็นทั้งหมดได้ก็จะถูกยกเลิกและออกด้วยสถานะที่ไม่ใช่ศูนย์
ดังนั้นคุณสามารถผลักดันทุกอย่างในคราวเดียวด้วย (จาก repo หลัก) a:
git push --recurse-submodules=on-demand
ตัวเลือกนี้ใช้ได้กับการซ้อนระดับเดียวเท่านั้น การเปลี่ยนแปลงโมดูลย่อยภายในโมดูลย่อยอื่นจะไม่ถูกผลัก
ด้วยคอมไพล์ 2.7 (มกราคม 2016) การผลักดันคอมไพล์ที่เรียบง่ายจะเพียงพอที่จะผลักดัน repo แม่ ... และทุก submodules ของมัน
ดูกระทำ d34141c , กระทำ f5c7cd9 (3 ธันวาคม 2015) กระทำ f5c7cd9 (3 ธันวาคม 2015) และกระทำ b33a15b (17 พฤศจิกายน 2015) โดยไมค์โครว์ (mikecrowe )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 5d35d72 , 21 ธันวาคม 2015)
push: เพิ่มrecurseSubmodulesตัวเลือกการกำหนดค่า
--recurse-submodulesพารามิเตอร์บรรทัดคำสั่งที่มีอยู่บางครั้ง แต่ก็ไม่เคยมีใครเทียบเท่าไฟล์ configตามสไตล์ของพารามิเตอร์ที่เกี่ยวข้องสำหรับ
git fetchเรามาสร้างpush.recurseSubmodulesค่าเริ่มต้นสำหรับพารามิเตอร์นี้
นอกจากนี้ยังต้องการการเพิ่ม--recurse-submodules=noเพื่ออนุญาตให้การกำหนดค่าถูกแทนที่บนบรรทัดคำสั่งเมื่อจำเป็นวิธีที่ง่ายที่สุดในการดำเนินการปรากฏขึ้นนี้จะเป็นที่จะทำให้การ
pushใช้รหัสในการในลักษณะที่คล้ายกับsubmodule-configfetch
push.recurseSubmodules:ตรวจสอบให้แน่ใจว่าโมดูลย่อยทั้งหมดที่ใช้โดยการแก้ไขที่จะพุชมีอยู่ในสาขาการติดตามระยะไกล
- หากค่าเป็น '
check' Git จะตรวจสอบว่าโมดูลย่อยทั้งหมดที่มีการเปลี่ยนแปลงในการแก้ไขที่จะพุชนั้นพร้อมใช้งานบนรีโมตอย่างน้อยหนึ่งโมดูลของโมดูลย่อย หากไม่มีการคอมมิตใด ๆ การกดจะถูกยกเลิกและออกด้วยสถานะที่ไม่ใช่ศูนย์- หากค่าเป็น '
on-demand' โมดูลย่อยทั้งหมดที่เปลี่ยนแปลงในการแก้ไขที่จะพุชจะถูกพุช หากออนดีมานด์ไม่สามารถผลักดันการแก้ไขที่จำเป็นทั้งหมดได้ก็จะถูกยกเลิกและออกด้วยสถานะที่ไม่ใช่ศูนย์ -- หากค่าเป็น '
no' พฤติกรรมเริ่มต้นของการละเว้นโมดูลย่อยเมื่อการพุชจะยังคงอยู่คุณสามารถแทนที่การกำหนดค่านี้ได้ในขณะที่พุชโดยระบุ "
--recurse-submodules=check|on-demand|no"
ดังนั้น:
git config push.recurseSubmodules on-demand
git push
Git 2.12 (ไตรมาส 1 2017)
git push --dry-run --recurse-submodules=on-demand จะใช้งานได้จริง
ดูกระทำ 0301c82 , กระทำ 1aa7365 (17 พฤศจิกายน 2016) โดยแบรนดอนวิลเลียมส์ (mbrandonw )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 12cf113 , 16 ธันวาคม 2016)
push run with --dry-runไม่ได้เกิดขึ้นจริง (Git 2.11 ธันวาคม 2016 และต่ำกว่า / ก่อนหน้า) ทำการ dry-run เมื่อมีการกำหนดค่าการพุชให้พุชโมดูลย่อยตามความต้องการ
แทนที่จะผลักดันโมดูลย่อยทั้งหมดที่จำเป็นต้องผลักดันไปที่รีโมตในขณะที่การอัปเดตใด ๆ สำหรับซูเปอร์โปรเจ็กต์จะดำเนินการแบบแห้ง
นี่เป็นข้อบกพร่องและไม่ใช่พฤติกรรมที่ตั้งใจไว้สำหรับการวิ่งแบบแห้งสอน
pushให้เคารพ--dry-runตัวเลือกเมื่อกำหนดค่าให้พุชโมดูลย่อย 'ตามความต้องการ' แบบวนซ้ำ
สิ่งนี้ทำได้โดยส่ง--dry-runแฟล็กไปยังกระบวนการย่อยซึ่งดำเนินการผลักดันโมดูลย่อยเมื่อดำเนินการแบบแห้ง
และยังคงอยู่ใน Git 2.12 ตอนนี้คุณ havea " --recurse-submodules=onlyตัวเลือก" ที่จะผลักดัน submodules ออกโดยไม่ต้องผลักดัน superproject
ดูกระทำ 225e8bf , กระทำ 6c656c3 , กระทำ 14c01bd (19 ธันวาคม 2016) โดยแบรนดอนวิลเลียมส์ (mbrandonw )
(รวมโดยJunio C Hamano - gitster-ในการกระทำ 792e22e , 31 มกราคม 2017)
git config push.recurseSubmodules on-demandคุณจะต้องตั้งค่าครั้งเดียว จากนั้นวิธีง่ายๆgit pushก็เพียงพอที่จะผลักดันทุกอย่าง (repo หลักและโมดูลย่อย) ดูคำตอบที่แก้ไขของฉันด้านล่าง