จะเปลี่ยนโมดูลย่อย git ให้ชี้ไปที่โฟลเดอร์ย่อยได้อย่างไร


104

skimming ผ่านsubmodule กวดวิชาฉันสร้าง submodule ออกจากโครงการ Boto จากนั้นฉันก็ค้นพบว่าจริงๆแล้วฉันต้องการเพียงบางส่วนของโปรเจ็กต์นี้โดยเฉพาะโฟลเดอร์boto

ฉันต้องการเปลี่ยนโมดูลย่อยของฉันให้ชี้ไปที่โฟลเดอร์นี้ เมื่อฉันดูใน. gitmodules ฉันเห็น

[submodule "backup/src/boto"]
    path = backup/src/boto
    url = https://github.com/boto/boto.git

สิ่งที่ฉันควรใช้ URL แทนhttps://github.com/boto/boto.git ? หลังจากเปลี่ยน URL แล้วควรลบโฟลเดอร์ boto ในเครื่องแล้วดึงใหม่หรือไม่


3
มันไม่ตรงกับที่คุณต้องการไม่ใช่โมดูลย่อย แต่คุณอาจลองดูgit subtree
Cascabel

1
สิ่งที่ฉันทำคือการมีโมดูลย่อยทั้งหมดและบอก IntelliJ ว่าโฟลเดอร์ boto เป็น 'โฟลเดอร์ต้นทาง' เพื่อให้สามารถค้นหาแพ็คเกจในนั้นได้
ripper234

16
ฉันไม่อยากจะเชื่อเลยว่าคอมไพล์จะไม่ทำแบบนี้ ...
rogerdpack

2
เจอคำถามคล้าย ๆ กัน - stackoverflow.com/questions/1121227/…
sashoalm

คำตอบ:


67

ฉันกลัวว่า URL ของโมดูลย่อยจะชี้ไปที่ที่เก็บเสมอ - คุณไม่สามารถระบุได้ว่าคุณต้องการแค่โฟลเดอร์ย่อยของที่เก็บในลักษณะเดียวกับที่ git ไม่รองรับ "แคบโคลนนิ่ง" โดยทั่วไป

หากคุณไม่สามารถอยู่ได้ด้วยการมีที่เก็บทั้งหมดเป็นโมดูลย่อยคุณสามารถสร้างที่เก็บใหม่ที่โคลนจาก boto จากนั้นตั้งค่างาน cron เพื่อ:

  1. git fetch ที่เก็บนั้นลงในไดเร็กทอรี
  2. ใช้git filter-branchเพื่ออัปเดตสาขาที่ไดเร็กทอรีย่อยอยู่ที่ระดับบนสุด
  3. เพิ่มสาขาของที่เก็บเป็นโมดูลย่อย อย่างไรก็ตามนั่นเป็นเรื่องเล็กน้อยและความชอบของฉันก็คือการมีที่เก็บทั้งหมดเป็นโมดูลย่อย

24

คุณไม่สามารถโคลนเฉพาะบางส่วนของที่เก็บได้ นี้เป็นเพราะถือว่าคอมไพล์ที่เก็บเป็นวัตถุทั้งหมด: เมื่อคุณได้รับมันคุณได้รับมันทั้งหมด

ดังนั้นวิธีแก้ปัญหาคือดึงโมดูลย่อยในไดเร็กทอรีอื่นจากนั้นใช้ symlink เพื่อให้บรรลุเป้าหมายของคุณ


ฉันมี symlink ใน windows ... ก็ใช้ได้ดีเช่นกัน (นั่นเป็นเพราะ msys ที่ฉันใช้ในเครื่องดังนั้นฉันจึงสามารถใช้งานได้ln -sเหมือนใน linux)
kumarharsh

7
Vista และ & มาพร้อมกับ MKLink ฉันใช้มัน howtogeek.com/howto/windows-vista/…
Angel S. Moreno

1
คุณสามารถใช้ฮาร์ดลิงก์แทนได้
KindDragon

16

สิ่งที่คุณต้องการทำคือสร้างสาขาในโมดูลย่อยและย้ายโฟลเดอร์ขึ้นและลบสิ่งที่คุณไม่ต้องการ จากนั้นคุณสามารถจัดการสาขานั้นแทนได้ หากคุณต้องการผลักดันการเปลี่ยนแปลงของคุณคุณควรจะกลับมารวมได้ก่อน Git จะรู้ว่าคุณย้ายไฟล์และทำการผสานสำเร็จ

หวังว่านี่จะช่วยได้


"การผสานกลับ" คืออะไร? คุณสามารถเสนอตัวอย่างได้หรือไม่?
Sukima

การผสานที่ไป "ต้นน้ำ" - จากสาขาลำดับที่สูงกว่าไปสู่ลำดับที่ต่ำกว่า ไลนัสเกลียดพวกนั้น พวกเขาผูกประวัติศาสตร์จากสาขาอื่นที่อาจถูกรวมเข้าด้วยกันแล้ว
Adam Dymitruk

คุณช่วยเพิ่มตัวอย่างเกี่ยวกับ "การผสานกลับ" ในสถานการณ์นี้ได้ไหม
เสี่ยว

โดยทั่วไปแล้วเมื่อคุณพยายามทำให้สาขาคุณลักษณะของคุณเป็นปัจจุบันโดยการรวมในสิ่งต่างๆจากสาขาหลักที่ทุกคนรวมการเปลี่ยนแปลงล่าสุด สิ่งนี้ไม่ดีเพราะเป็นการผูกสาขาของคุณกับงานของผู้อื่น หากผลิตภัณฑ์ต้องการสาขาของคุณ แต่ไม่มีสาขาอื่นอยู่แล้วในสาขาการรวมระบบจะเป็นไปไม่ได้
Adam Dymitruk

1
ไอเดียน่าสนใจมีใครลองทำบ้างไหม? ฉันจะลองเร็ว ๆ นี้ แต่ยังไม่แน่ใจว่า "การผสานย้อนกลับ" จะชัดเจนและเป็นอัตโนมัติ ...
moudrick
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.