ตามที่ระบุไว้ในบล็อกโพสต์มาร์ค Longair ของGit submodules อธิบาย ,
รุ่น 1.7.0 และใหม่กว่าของ git มีการเปลี่ยนแปลงที่น่ารำคาญในพฤติกรรมของ submodule git
ตอนนี้ Submodules ถูกมองว่าสกปรกหากมีไฟล์ที่แก้ไขหรือไฟล์ที่ไม่ได้ติดตามซึ่งก่อนหน้านี้มันจะเป็นเพียงกรณีที่ HEAD ใน submodule ชี้ไปที่การกระทำผิด
ความหมายของเครื่องหมายบวก ( +
) ในผลลัพธ์ของ submodule git มีการเปลี่ยนแปลงและเป็นครั้งแรกที่คุณเจอสิ่งนี้จะใช้เวลาสักครู่ในการคิดว่าเกิดอะไรขึ้นเช่นดูจาก changelogs หรือใช้ git bisect บน git .git เพื่อค้นหาการเปลี่ยนแปลง ผู้ใช้จะแนะนำสัญลักษณ์ที่แตกต่างกันสำหรับ“ ในเวอร์ชั่นที่ระบุ แต่สกปรก”
คุณสามารถแก้ไขได้โดย:
ไม่ว่าจะกระทำหรือเลิกทำการเปลี่ยนแปลง / วิวัฒนาการในแต่ละ submodules ของคุณก่อนที่จะกลับไปที่ repo หลัก (ที่ diff ไม่ควรรายงานไฟล์ "สกปรก" อีกต่อไป) หากต้องการยกเลิกการเปลี่ยนแปลงทั้งหมดของ submodule ของคุณเพียงแค่cd
เข้าไปในไดเรกทอรีรากของ submodule ของคุณและทำgit checkout .
ความคิดเห็นdotnetCarpenterที่คุณสามารถทำได้:git submodule foreach --recursive git checkout .
หรือเพิ่ม--ignore-submodules
ในของคุณgit diff
เพื่อเพิกเฉยต่อรายการย่อย "สกปรก" เหล่านั้นชั่วคราว
ใหม่ใน Git เวอร์ชั่น 1.7.2
ในฐานะที่เป็นโนม ความคิดเห็นด้านล่าง , คำถามนี้กล่าวว่าตั้งแต่รุ่นคอมไพล์ 1.7.2 คุณสามารถละเลย submodules สกปรกด้วย:
git status --ignore-submodules=dirty
git commit -a
โดยไม่ต้องกังวลกับการเพิ่มการเปลี่ยนแปลงเหล่านี้ แม้ว่าพวกเขากำลังทำเครื่องหมายไว้M
ข้างหน้า แต่พวกเขาจะไม่จบลงด้วยความมุ่งมั่นของคุณ