Git submodule แสดงการกระทำใหม่สถานะ submodule จะไม่ทำอะไรเลย


47

ในที่เก็บ git ฉันได้ตั้งค่าไฟล์. gitmodules ของฉันเพื่ออ้างอิงที่เก็บ github:

[submodule "src/repo"]
    path = src/repo
    url = repourl

เมื่อฉัน 'สถานะคอมไพล์' ใน repo นี้มันแสดง:

On branch master
Your branch is up-to-date with 'origin/master'.

Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)

modified:   src/repo (new commits)

ถ้าฉัน cd เป็น src / repo และสถานะ git บน repo มันบอกว่าไม่มีอะไรที่จะต้องทำ

ทำไม repo คอมไพล์ระดับบนสุดของฉันถึงบ่น?

คำตอบ:


42

เป็นเพราะบันทึก Git ที่กระทำ (ไม่ใช่สาขาหรือแท็กหนึ่งรายการที่แสดงใน Hash SHA-1) ควรตรวจสอบข้อมูลสำหรับแต่ละ submodule หากคุณเปลี่ยนบางสิ่งใน submodule dir Git จะตรวจจับและกระตุ้นให้คุณยอมรับการเปลี่ยนแปลงเหล่านั้นใน repoisitory ระดับบนสุด

ทำงานgit diffในพื้นที่เก็บข้อมูลระดับบนสุดเพื่อแสดงสิ่งที่ Git เปลี่ยนไป หากคุณได้ทำคอมมิชชันใน submodule แล้ว (เช่น "clean" ใน submodule) มันจะรายงานการเปลี่ยนแปลงแฮชของ submodule

$ git diff
diff --git a/src/repo b/src/repo
index b0c86e2..a893d84 160000
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit a893d84d323cf411eadf19569d90779610b10280

มิฉะนั้นจะแสดง-dirtyการเปลี่ยนแปลงแฮชซึ่งคุณไม่สามารถจัดลำดับหรือกระทำในที่เก็บระดับบนสุด git statusยังอ้างว่า submodule มีเนื้อหาที่ไม่ได้ติดตาม / แก้ไข

$ git diff
diff --git a/src/repo b/src/repo
--- a/src/repo
+++ b/src/repo
@@ -1 +1 @@
-Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea
+Subproject commit b0c86e28675c9591df51eedc928f991ca42f5fea-dirty

$ git status
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git checkout -- <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)

    modified:   src/repo (untracked content)

no changes added to commit (use "git add" and/or "git commit -a")

ในการอัปเดตบันทึกการกระทำที่ควรตรวจสอบสำหรับ submodule คุณต้องคอมไพล์ยอมรับ submodule นอกเหนือจากการยอมรับการเปลี่ยนแปลงใน submodule:

git add src/repo

1
ถ้าฉันไม่ต้องการเพิ่มคอมมิชชันใด ๆ ใน repo หลัก กรณีการใช้งานของฉันคือ - ฉันมีพื้นที่เก็บข้อมูลหลักแล้วฉันมีวิกิซึ่งเป็นพื้นที่เก็บข้อมูล (เช่นใน GitHub และ Bitbucket) ตอนนี้ผมได้เพิ่มwikiเป็น submodule ในไดเรกทอรีวิกิพีเดีย ฉันไม่ต้องการให้การเปลี่ยนแปลงใด ๆ ของฉันจากwiki(เช่นไดเรกทอรีwiki ) แสดงในที่เก็บหลัก / รหัสของฉัน ฉันควรเพิ่ม.gitmodules เส้นทางใน.gitignoreที่เก็บหลักหรือไม่ ฉันจะไปเกี่ยวกับมันได้อย่างไร
yadav_vi

14
ในกรณีของฉันทั้งหมดที่ฉันต้องทำคืออัปเดต submodule ด้วยตัวเองจาก repo หลัก สิ่งที่ต้องการ:git submodule update src/repo
Agustín Amenabar

19

ฉันเพิ่งพบปัญหาระดับเดียวกันนี้และฉันสามารถใช้โซลูชันที่@AugustinAmenabarนำเสนอในส่วนความคิดเห็นของคำตอบที่ยอมรับได้ การตั้งค่าของฉันซับซ้อนกว่าเล็กน้อยดังนั้นฉันจึงเพิ่มการ--recursiveตั้งค่าสถานะเพื่อทำให้การอ้างอิงทั้งหมดเป็นปัจจุบัน

git submodule update src/repo --recursive

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