คุณจะใช้. git / info / exclude แทน. gitignore เพื่อแยกไฟล์เมื่อใด


156

ฉันสับสนเล็กน้อยเกี่ยวกับข้อดีข้อเสียของการใช้.git/info/excludeและ.gitignoreการยกเว้นไฟล์

ทั้งสองอยู่ในระดับของที่เก็บ / โครงการดังนั้นจึงแตกต่างกันอย่างไรและควรใช้เมื่อ.git/info/excludeใด

คำตอบ:


215

ประโยชน์ของการก็คือว่ามันสามารถตรวจสอบได้ลงพื้นที่เก็บข้อมูลของตัวเองแตกต่างจาก.gitignore .git/info/excludeข้อดีก็คือว่าคุณสามารถมีหลาย.gitignoreไฟล์หนึ่งในแต่ละไดเรกทอรี / .git/info/excludeไดเรกทอรีย่อยสำหรับเฉพาะไดเรกทอรีละเว้นกฎซึ่งแตกต่างจาก

ดังนั้นจึง.gitignoreสามารถใช้ได้กับทุกโคลนของที่เก็บ ดังนั้นในทีมขนาดใหญ่ทุกคนจะไม่สนใจชนิดเดียวกันของไฟล์ตัวอย่าง ,*.db *.logและคุณสามารถมีกฎการละเว้นที่เฉพาะเจาะจงมากขึ้นได้เนื่องจากมีหลาย.gitignoreข้อ

.git/info/excludeสามารถใช้ได้สำหรับการโคลนแต่ละคนเท่านั้นดังนั้นสิ่งที่คน ๆ หนึ่งเพิกเฉยในร่างโคลนของเขาจึงไม่มีอยู่ในร่างโคลนของคนอื่น ตัวอย่างเช่นหากมีคนใช้Eclipseเพื่อการพัฒนาอาจเป็นเรื่องที่สมเหตุสมผลสำหรับนักพัฒนารายนั้นที่จะเพิ่ม.buildโฟลเดอร์เข้าไป.git/info/excludeเนื่องจากนักพัฒนาอื่น ๆ อาจไม่ได้ใช้ Eclipse

โดยทั่วไปไฟล์ / ละเว้นกฎที่ต้องถูกละเว้นในระดับสากลควรเข้าไปใน.gitignoreมิฉะนั้นไฟล์ที่คุณต้องการละเว้นเฉพาะในโคลนภายในของคุณควรเข้าสู่.git/info/exclude


แต่ควรไปที่ ~ / .gitignore ตามเอกสารอย่างเป็นทางการของ Git ที่นี่git-scm.com/docs/gitignore
Devendra Swami

@DevendraSwami ฉันไม่เข้าใจว่ารายการใดที่ควรเข้าไป~/.gitignoreในความคิดเห็นของคุณด้านบน ความเข้าใจของฉันคือการละเว้นกฎสามารถมีได้ 3 ระดับ - $PROJECT/.git/info/excludeสำหรับกฎการละเว้นเฉพาะ (โปรเจ็กต์ผู้ใช้) $PROJECT/<any number of directories>/.gitignoreซึ่งมีไว้สำหรับกฎการละเว้นเฉพาะโปรเจ็กต์สำหรับผู้ใช้ทุกราย (เมื่อเช็คอิน) ~/.gitignore สำหรับกฎการละเว้นเฉพาะผู้ใช้สำหรับโปรเจ็กต์ใด ๆ สำหรับผู้ใช้ บนเครื่องนั้น ขึ้นอยู่กับวัตถุประสงค์ที่คุณเลือกสถานที่ที่จะนำรายการใน.
หมู่無

ใช่คุณพูดถูกจริงๆ ความคิดเห็นของฉันเกี่ยวข้องกับคำถามนี้stackoverflow.com/questions/59673991/…
Devendra Swami

ฉันขอโทษสำหรับความคิดเห็นเดิมที่ไม่สมบูรณ์
Devendra Swami

2
@ShimmyWeitzhandler ไฟล์ sln อยู่ใน repo ของคุณแล้วหรือยัง? จากนั้นยกเว้นหรือ. signore จะไม่ป้องกันไม่ให้คอมไพล์ติดตามการเปลี่ยนแปลง ลองทำอย่างใดอย่างหนึ่งต่อไปนี้: git rm --cached <path-name>จะลบออกจากที่เก็บ แต่เก็บไว้ในเครื่อง git update-index --skip-worktree <path-name>จะละเว้นการเปลี่ยนแปลงของไฟล์ แต่เก็บไว้ในที่เก็บ จากความอยากรู้: ทำไมคุณถึงต้องการยกเว้นไฟล์ sln? เป็นส่วนสำคัญของโซลูชัน. Net ใช่ไหม
Koen

43

Googled: 3 วิธีในการยกเว้นไฟล์

  1. .gitignore ใช้กับทุกโคลนของที่เก็บนี้ (ทุกคนจะมีเวอร์ชัน)
  2. .git/info/exclude ใช้กับสำเนาท้องถิ่นของที่เก็บนี้ของคุณเท่านั้น (ในเครื่องไม่แชร์กับผู้อื่น)
  3. ~/.gitignore ใช้กับที่เก็บทั้งหมดบนคอมพิวเตอร์ของคุณ (ภายในเครื่องไม่ใช้ร่วมกับผู้อื่น)

3. ต้องตั้งค่าบนคอมพิวเตอร์ของคุณจริง:

git config --global core.excludesfile '~/.gitignore'

2
ใช่ฉันอ่านเช่นกัน แต่อยากได้มุมมองที่เป็นประโยชน์ (โลกแห่งความจริง) มากขึ้น :-)
Parag

บล็อกที่เชื่อมโยงเรียกไฟล์ผิดพลาด.git/info/excludesเมื่อควรจะ.git/info/excludeเป็นตามที่ยืนยันโดยเอกสารที่ลิงก์ไป
mwfearnley

13
(สปอยเลอร์: วิธีที่สามคือการละเว้นคอมพิวเตอร์ทั่วโลกผ่านการตั้งค่าใน ~ / .gitconfig)
hmijail ไว้อาลัยผู้ลาออก

@hmijail: ขอบคุณฉันรวมความคิดเห็นของคุณไว้ในคำตอบนี้
LeGEC

14

เพียงแค่นำเสนอประสบการณ์ (โลกแห่งความจริง) ของเรา: เราเริ่มใช้. git / info / exclude เมื่อเราต้องปรับแต่งไฟล์กำหนดค่าบางไฟล์ในแต่ละสภาพแวดล้อมการพัฒนา แต่ยังคงต้องการให้แหล่งที่มาได้รับการดูแลใน repo และพร้อมให้นักพัฒนารายอื่น ๆ

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


5

ใช้.gitignoreสำหรับการละเว้นกฎที่มีความเฉพาะเจาะจงกับโครงการ การใช้งานexcludeหรือไม่สนใจทั่วโลกไฟล์ไม่สนใจกฎระเบียบที่มีเฉพาะของคุณสภาพแวดล้อม

ตัวอย่างเช่นไฟล์ที่ไม่สนใจทั่วโลกของฉันจะเพิกเฉยต่อไฟล์ชั่วคราวที่สร้างขึ้นโดยตัวแก้ไขใด ๆ ก็ตามที่ฉันใช้กฎนั้นเฉพาะสำหรับสภาพแวดล้อมของฉันและอาจแตกต่างกันไปสำหรับนักพัฒนารายอื่นในโครงการเดียวกัน (บางทีอาจใช้โปรแกรมแก้ไขอื่น) OTOH .gitignoreไฟล์โครงการของฉันจะเพิกเฉยต่อสิ่งต่างๆเช่นคีย์ API และสร้างอาร์ติแฟกต์ซึ่งมีไว้สำหรับโครงการและควรจะเหมือนกันสำหรับทุกคนในโครงการ

ที่ช่วย?


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