การติดตามโมดูลย่อยของคอมไพล์ล่าสุด


141

เรากำลังย้ายโปรเจ็กต์ (ขนาดใหญ่) ไปยังคอมไพล์และเรากำลังคิดที่จะใช้โมดูลย่อย แผนของเราคือการมีหัวหน้าที่แตกต่างกันสามแบบในโครงการซูเปอร์โปรเจ็กต์: การเปิดตัวเสถียรล่าสุด หัวหน้าโครงการจะจัดการกับสาขาที่ออกและมีเสถียรภาพ พวกเขาจะย้ายโมดูลย่อยตามต้องการ

ประเด็นคือหัว "ล่าสุด" เราต้องการให้ส่วนหัว "ล่าสุด" ของ superproject ติดตามสาขาหลักของโมดูลย่อยทั้งหมด (โดยอัตโนมัติ) และจะเป็นการดีเช่นกันหากจะแสดงประวัติของการกระทำทั้งหมดกับโมดูลย่อย

ฉันได้ดู gitslave แล้ว แต่มันไม่ใช่สิ่งที่เราต้องการ ข้อเสนอแนะใด ๆ ?


ในขณะที่คุณถามหาเครื่องมือฉันแค่ต้องการเชื่อมต่อคำถามนี้ซึ่งรวบรวมหนึ่งสมุทรที่ทำสิ่งเดียวกัน: stackoverflow.com/questions/1030169/…
Tobu

ขณะนี้ Git เสนอการติดตามล่าสุดด้วยโมดูลย่อย: ดูคำตอบที่แก้ไขของฉัน
VonC

คำตอบ:


240

อัปเดตมีนาคม 2556

Git 1.8.2เพิ่มความเป็นไปได้ในการติดตามสาขา

" git submodule" เริ่มเรียนรู้โหมดใหม่เพื่อรวมเข้ากับส่วนปลายของสาขาระยะไกล (ตรงข้ามกับการผสานรวมกับคอมมิตที่บันทึกไว้ใน gitlink ของ superproject)

# add submodule to track master branch
git submodule add -b master [URL to Git repo];

# update your submodule
git submodule update --remote 

หากคุณมีโมดูลย่อยอยู่แล้วตอนนี้คุณต้องการติดตามสาขาโปรดดู " วิธีสร้างโมดูลย่อยที่มีอยู่ติดตามสาขา "

นอกจากนี้โปรดดูบทแนะนำของ Vogella เกี่ยวกับโมดูลย่อยสำหรับข้อมูลทั่วไปเกี่ยวกับโมดูลย่อย

บันทึก:

git submodule add -b . [URL to Git repo];
                    ^^^

ดูgit submoduleหน้าคน :

ค่าพิเศษ.ที่ใช้ในการแสดงให้เห็นว่าชื่อของสาขาใน submodule ที่ควรจะเป็นชื่อเดียวกับชื่อสาขาในปัจจุบันที่เก็บในปัจจุบัน


ดูการกระทำ b928922727d6691a3bdc28160f93f25712c565f6 :

submodule add: หาก--branchได้รับให้บันทึกในรูปแบบ.gitmodules

สิ่งนี้ช่วยให้คุณบันทึกsubmodule.<name>.branchตัวเลือกได้อย่างง่ายดาย.gitmodulesเมื่อคุณเพิ่มโมดูลย่อยใหม่ ด้วยแพทช์นี้

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

ลดเป็น

$ git submodule add -b <branch> <repository> [<path>]

ซึ่งหมายความว่าจะโทรไปในอนาคต

$ git submodule update --remote ...

จะได้รับการอัปเดตจากสาขาเดียวกับที่คุณใช้ในการเริ่มต้นโมดูลย่อยซึ่งโดยปกติจะเป็นสิ่งที่คุณต้องการ

ลงนามโดย: W. Trevor King


คำตอบเดิม (กุมภาพันธ์ 2555):

โมดูลย่อยคือการคอมมิตเดียวที่อ้างอิงโดย repo หลัก
เนื่องจากเป็น Git repo ของตัวเอง "ประวัติของการกระทำทั้งหมด" จึงสามารถเข้าถึงได้ผ่านทางgit logโมดูลย่อยนั้น

ดังนั้นเพื่อให้ผู้ปกครองติดตามการกระทำล่าสุดของสาขาย่อยที่กำหนดโดยอัตโนมัติก็จะต้อง

  • cd ในโมดูลย่อย
  • git fetch / pull เพื่อให้แน่ใจว่ามีการคอมมิตล่าสุดในสาขาที่ถูกต้อง
  • cd กลับใน repo หลัก
  • เพิ่มและคอมมิตเพื่อบันทึกคอมมิตใหม่ของโมดูลย่อย

gitslave (ที่คุณดูแล้ว) ดูเหมือนจะเหมาะสมที่สุดรวมถึงการดำเนินการคอมมิตด้วย

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

ทางเลือกอื่น ๆ ที่มีรายละเอียดที่นี่


2
@BraveNewMath คุณจะต้องชำระเงินสาขาที่เหมาะสมในการ submodule ของคุณแล้วไปที่ repo git config -f .gitmodules submodule.<path>.branch <branch>ผู้ปกครองและประเภทของคุณ: เพิ่มทุกอย่างกระทำและผลักดัน
VonC

2
@BraveNewMath ฉันรายละเอียดทุกขั้นตอนสำหรับการทำ submodule ติดตามสาขาในstackoverflow.com/a/18799234/6309
VonC

1
สิ่งสำคัญคือต้องใช้--remoteแท็กหากคุณไม่ต้องการถอดหัวเมื่อคุณอัปเดตสงสัยว่าทำไมดูเหมือนว่าโค้ดที่ดึงออกมาใหม่ ๆ ของคุณจะอยู่เบื้องหลังมาสเตอร์!
Chris Watts

3
@DC_ ฉันเห็นด้วยกับ "คำตอบนี้" (ตั้งแต่ฉันเขียนมัน) คุณลักษณะ "การติดตามสาขา" มีไว้เพื่ออัปเดตโมดูลย่อยเป็นคอมมิตล่าสุดของสาขา เมื่อเสร็จแล้วคุณจะยังคงต้องเพิ่มและยอมรับสถานะโมดูลย่อยใหม่ใน repo หลัก และโคลนถัดไปจะชำระเงินในสถานะนั้น (ไม่มีหัว)
VonC

3
@VonC ดังนั้นเพื่อให้ชัดเจนยิ่งขึ้นคุณลักษณะ "การติดตามสาขา" จะมีผลเฉพาะกับลักษณะการทำงานของgit submodule updateคำสั่งโดยการบอกว่าการกระทำใด (เช่นการกระทำล่าสุดบนต้นแบบ) เพื่ออัปเดตโมดูลย่อยเป็นโดยอัตโนมัติไม่ทำให้ repo พาเรนต์อัปเดตโดยอัตโนมัติ คอมมิตถูกชี้ไปที่โมดูลย่อยในเวลาโคลน?
christner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.