หากฉันแก้ไขโมดูลย่อยฉันสามารถส่งคอมมิตกลับไปยังจุดเริ่มต้นของโมดูลย่อยได้หรือไม่หรือต้องใช้การโคลน ถ้าโคลนฉันจะเก็บโคลนไว้ในที่เก็บอื่นได้หรือไม่?
หากฉันแก้ไขโมดูลย่อยฉันสามารถส่งคอมมิตกลับไปยังจุดเริ่มต้นของโมดูลย่อยได้หรือไม่หรือต้องใช้การโคลน ถ้าโคลนฉันจะเก็บโคลนไว้ในที่เก็บอื่นได้หรือไม่?
คำตอบ:
โมดูลย่อยไม่ใช่อะไรเลยนอกจากโคลนของ 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-config
fetch
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 หลักและโมดูลย่อย) ดูคำตอบที่แก้ไขของฉันด้านล่าง