เว้นแต่ repo ประกอบด้วยโครงการอิสระหลายโครงการดูเหมือนว่าจะง่ายที่สุดที่จะมีเพียง.gitignore
ไฟล์เดียวที่รูทของ repo มากกว่าโครงการอื่น ๆ มีวิธีปฏิบัติที่เป็นมาตรฐานที่ดีที่สุดสำหรับการวิเคราะห์นี้หรือออนไลน์เมื่อใดที่วิธีการหนึ่งดีกว่าวิธีอื่น?
เว้นแต่ repo ประกอบด้วยโครงการอิสระหลายโครงการดูเหมือนว่าจะง่ายที่สุดที่จะมีเพียง.gitignore
ไฟล์เดียวที่รูทของ repo มากกว่าโครงการอื่น ๆ มีวิธีปฏิบัติที่เป็นมาตรฐานที่ดีที่สุดสำหรับการวิเคราะห์นี้หรือออนไลน์เมื่อใดที่วิธีการหนึ่งดีกว่าวิธีอื่น?
คำตอบ:
ฉันสามารถคิดถึงอย่างน้อยสองสถานการณ์ที่คุณต้องการมีหลาย.gitignore
ไฟล์ในไดเรกทอรี (ย่อย) ที่แตกต่างกัน
ไดเร็กทอรีที่ต่างกันมีไฟล์ประเภทต่าง ๆ ที่ต้องเพิกเฉย ตัวอย่างเช่น.gitignore
ในไดเรกทอรีบนสุดของโครงการของคุณละเว้นโปรแกรมที่สร้างขึ้นในขณะที่Documentation/.gitignore
ละเว้นเอกสารที่สร้างขึ้น
ไม่ต้องสนใจไฟล์ที่กำหนดในไดเรกทอรี (sub) ที่ให้ไว้เท่านั้น (คุณสามารถใช้/sub/foo
ใน.gitignore
)
โปรดจำไว้ว่ารูปแบบใน.gitignore
ไฟล์จะใช้ซ้ำกับไดเรกทอรี (ย่อย) ไฟล์ที่อยู่ในและไดเรกทอรีย่อยทั้งหมดยกเว้นรูปแบบที่มี '/' (เช่นรูปแบบที่name
ใช้กับไฟล์ใด ๆ ที่มีชื่อname
ในไดเรกทอรีที่กำหนดและไดเรกทอรีย่อยทั้งหมดในขณะที่/name
ใช้กับไฟล์ ด้วยชื่อนี้เท่านั้นในไดเรกทอรีที่กำหนด)
Documentation/**/*.html
(หมายเหตุว่าเบรกเฉือนรูปแบบนั้น/foo
จะใช้ในการยึดไฟล์โดยตรงใน directory)
ในฐานะโน้ตสัมผัสวงหนึ่งกรณีที่ความสามารถในการมีหลาย.gitignore
ไฟล์นั้นมีประโยชน์มากคือถ้าคุณต้องการไดเร็กตอรี่พิเศษในสำเนาการทำงานที่คุณไม่ต้องการกระทำ เพียงแค่ใส่ 1 ไบต์.gitignore
(มีเพียงดอกจันเดียว) ในไดเรกทอรีนั้นและมันจะไม่ปรากฏขึ้นในgit status
ฯลฯ
printf \* > .gitignore
(การล้างข้อมูลนั้นเป็นไปโดยอัตโนมัติเมื่อคุณลบไดเรกทอรี) ฉันแน่ใจว่ามีสถานการณ์ที่.git/info/exclude
เป็นตัวเลือกที่เหมาะสมกว่า แต่ไม่มากนัก
คุณสามารถมีได้หลายรายการ.gitignore
แต่ละหลักสูตรในไดเรกทอรีของตัวเอง
ในการตรวจสอบกฎ gitignore ที่รับผิดชอบการเพิกเฉยไฟล์ให้ใช้git check-ignore
: git check-ignore -v -- afile
.
และคุณสามารถมีรุ่นที่แตกต่างของ.gitignore
ไฟล์ต่อสาขา: ผมได้เห็นแล้วว่าจะมีการกำหนดค่าสำหรับการสร้างความมั่นใจสาขาหนึ่งละเว้นไฟล์ในขณะที่สาขาอื่น ๆ ที่ไม่ได้: เห็นนี้คำถามเช่น
หาก repo ของคุณรวมถึงโครงการหลายชาติก็จะดีที่สุดที่จะอ้างอิงพวกเขาเป็นsubmodulesแม้ว่า
นั่นจะเป็นแนวปฏิบัติที่ดีที่สุดที่แท้จริงช่วยให้แต่ละโครงการเหล่านั้นสามารถทำการโคลนได้อย่างอิสระ (พร้อม.gitignore
ไฟล์ที่เกี่ยวข้อง) ในขณะที่ถูกอ้างอิงโดยการแก้ไขเฉพาะในโครงการหลักระดับโลก
ดูธรรมชาติที่แท้จริงของ submodulesเพิ่มเติม
โปรดทราบว่าเนื่องจาก git 1.8.2 (มีนาคม 2013) คุณสามารถทำgit check-ignore -v -- yourfile
เพื่อดูว่าการรัน gitignore ใด (จาก.gitignore
ไฟล์ใด) ที่ใช้กับ ' yourfile
' และเข้าใจได้ดีขึ้นว่าเหตุใดไฟล์ดังกล่าวจึงถูกละเว้น
โปรดดูที่ " ซึ่งgitignore
กฎละเลยไฟล์ของฉันได้อย่างไร "
โปรเดียว
หาง่าย
การตามล่ากฎการแยกตัวออกอาจเป็นเรื่องยากถ้าฉันมี gitignore หลายตัวในหลาย ๆ ระดับใน repo
ด้วยหลายไฟล์คุณมักจะจบลงด้วยความซ้ำซ้อน
หลายโปร
กำหนดขอบเขต "ความรู้" ให้กับส่วนของแผนผังไฟล์ที่จำเป็น
เนื่องจาก Git ติดตามเฉพาะไฟล์ไฟล์. gitignore ที่ว่างเปล่าเป็นวิธีเดียวในการคอมมิทไดเรกทอรี "empty"
(และก่อนหน้า Git 1.8 วิธีเดียวที่จะยกเว้นรูปแบบที่เหมือนกันmy/**.example
คือสร้างmy/.gitignore
ด้วยรูปแบบ**.foo
เหตุผลนี้ไม่สามารถใช้ได้ในตอนนี้เท่าที่คุณสามารถทำได้/my/**/*.example
)
ฉันชอบไฟล์เดียวมากซึ่งฉันสามารถค้นหาการยกเว้นทั้งหมดได้ ฉันไม่เคยพลาดไดเรกทอรีต่อ. svn และฉันจะไม่พลาดไดเรกทอรีต่อ. gitignore เช่นกัน
ที่กล่าวว่า gitignores หลายคนค่อนข้างบ่อย หากคุณใช้มันอย่างน้อยก็ควรใช้อย่างสม่ำเสมอเพื่อให้เหมาะสมกับการทำงาน ตัวอย่างเช่นคุณอาจวางไว้ในไดเรกทอรีเพียงหนึ่งระดับจากรูท
empty
สำหรับเรื่องนั้น) นั้นเป็นเรื่องธรรมดา
มีสถานการณ์มากมายที่คุณต้องการที่จะกระทำไดเรกทอรีเพื่อ repo Git ของคุณ แต่ไม่มีไฟล์ในนั้นเช่นมีlogs
, cache
, uploads
ไดเรกทอรี ฯลฯ
ดังนั้นสิ่งที่ฉันทำเสมอคือการเพิ่ม.gitignore
ไฟล์ในไดเรกทอรีเหล่านั้นด้วยเนื้อหาต่อไปนี้:
*
!.gitignore
ด้วย.gitignore
ไฟล์นี้Git จะไม่ติดตามไฟล์ใด ๆ ในไดเรกทอรีเหล่านั้น แต่ก็ยังอนุญาตให้ฉันเพิ่ม.gitignore
ไฟล์และด้วยเหตุนี้ไดเรกทอรีจึงไปยัง repo