ฉันจะหยุด. gitignore ไม่ให้ปรากฏในรายการไฟล์ที่ไม่ได้ติดตามได้อย่างไร


971

ฉันเพิ่งทำgit initรากของโครงการใหม่ของฉัน

จากนั้นฉันก็สร้าง.gitignoreไฟล์

ตอนนี้เมื่อฉันพิมพ์git status, .gitignoreไฟล์ที่ปรากฏอยู่ในรายชื่อของไฟล์ที่ไม่ได้ติดตาม ทำไมถึงเป็นอย่างนั้น?


13
git add self && git commit -m "-1 for reverting existential depression" && git remote rm HEAD
Alastair

1
ฉันจะเพิกเฉยต่อไฟล์. git / และใส่ไว้ใน ".gitignore" ได้หรือไม่?
Timo

2
คุณสามารถสร้าง "gitignore" ระดับโลกในโฟลเดอร์บ้านของคุณภายใต้ Linux และเก็บไว้ที่นั่น: git config --global core.excludesfile ~ / .gitignore_global
Timo

14
ฉันมาที่นี่โดยการค้นหาhow to gitignore .gitinore fileและคำถามและคำตอบที่ยอมรับไม่ได้เกี่ยวข้องกับชื่อเรื่องจริงๆ ควรปรับปรุงชื่อเรื่อง
m.rufca

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

คำตอบ:


959

.gitignoreไฟล์ควรจะอยู่ในพื้นที่เก็บข้อมูลของคุณจึงควรจะเพิ่มแน่นอนและความมุ่งมั่นในขณะที่git statusแสดงให้เห็น มันจะต้องเป็นส่วนหนึ่งของทรีที่เก็บเพื่อให้การเปลี่ยนแปลงนั้นสามารถผสานและอื่น ๆ

ดังนั้นเพิ่มไปยังที่เก็บของคุณไม่ควร gitignored

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

ดูเพิ่มเติมที่https://help.github.com/articles/ignoring-files


17
นี่ไม่ควรเป็นส่วนหนึ่งของข้อมูลเมตาของที่เก็บแทนที่จะเป็นไฟล์ที่ถูกติดตาม?
endolith

13
ข้อมูลเมตาของที่เก็บเป็นโลคัลสำหรับที่เก็บ หากคุณเพิ่มการผูกเบ็ดลงใน repo ของคุณและมีคนลอกเลียนแบบ repo ของคุณพวกเขาจะไม่ได้รับ commit hook ตัวอย่างเช่น
สิงหาคม Lilleaas

91
@ wukong ถ้าคุณทำงานกับทีมทุกคนไม่ควรละเลยไฟล์ชุดเดียวกัน นั่นเป็นเหตุผลที่ไฟล์. gitignore ถูกเพิ่มเข้าในที่เก็บ ไม่มีใครบอกว่าคุณต้องปรับใช้เป็นส่วนหนึ่งของโครงการของคุณ
Ryan Lundy

13
@endolith และ wukong ไม่จำเป็นต้องเป็นไฟล์ใน repo ของคุณ คุณสามารถตั้งค่าการเพิกเฉยได้ในหลาย ๆ ที่ GitHub มีบทความที่ยอดเยี่ยมเกี่ยวกับมันhelp.github.com/ignore-filesคุณสามารถตั้งค่าการเพิกเฉยได้ทั่วโลกได้ทุกที่และคุณสามารถตั้งค่า repo เฉพาะได้ใน. git metadata สำหรับ repo
Boushley

6
@ deed02392 ในการใช้ไฟล์ที่ไม่ใช้เหล่านี้คุณต้องใช้วิจารณญาณในสิ่งที่คุณใส่ลงไป แต่ก็ยังมีประโยชน์มากมาย ตัวอย่างเช่นฉันใช้ Vim และดังนั้นใน gitignore ทั่วโลกของฉันฉันมีไฟล์ * .swp ที่ทำเครื่องหมายว่าถูกละเว้น วิธีนี้ฉันไม่จำเป็นต้องเพิ่มลงในแต่ละโครงการของฉันและพวกที่ไม่เคยใช้เสียงเรียกเข้าก็ไม่ต้องกังวลกับมัน
Boushley

282

หากคุณต้องการที่จะเก็บรายชื่อของไฟล์ละเว้นนอกของต้นไม้ Git ของคุณคุณสามารถใช้.git / ข้อมูล / ไม่รวมไฟล์ มันใช้เฉพาะกับการชำระเงินของ repo ของคุณ


19
+1 สิ่งนี้เหมาะอย่างยิ่งสำหรับการละเว้นที่ไม่เกี่ยวข้องกับโครงการเช่น emacs * ~ ไฟล์สำรอง, .DS_Store จาก OS X และอื่น ๆ
August Lilleaas

38
@AugustLilleaas โดยส่วนตัวแล้วฉันชอบที่จะใส่ไฟล์ประเภท {editor, platform} -specific เหล่านี้ลงไป~/.gitignoreเพื่อที่จะไม่สนใจที่เก็บข้อมูลใด ๆ ที่ฉันทำงานอยู่
Michael Mior

22
เมื่อไฟล์ถูกติดตามคุณสามารถใช้git update-index --assume-unchanged <file>เพื่อหยุดการติดตามการเปลี่ยนแปลงโดยไม่ต้องเปลี่ยน repo ของคุณ สิ่งนี้มีประโยชน์มากสำหรับโครงการขนาดใหญ่ที่ใช้ร่วมกันซึ่งคุณต้องทำการเปลี่ยนแปลงในท้องถิ่น แต่ไม่มีใครต้องการเห็นสิ่งที่คุณทำเพื่อซื้อคืน ดูblog.pagebakers.nl
Chris Esplin

6
@AugustLilleaas: gitignore ต่อผู้ใช้ดีกว่าสำหรับกรณีใช้งาน
หอยทากวิศวกรรม

3
ขอบคุณสำหรับเคล็ดลับนี้ฉันใช้ git-svn ดังนั้นผู้ใช้รายอื่นของ svn repo บนเซิร์ฟเวอร์จะไม่ต้องการให้. gitignore เช็คอินแน่นอน
enorl76

74

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


7
ทำงานให้ฉัน! รุ่น 1.5.6.5 ฉันยังเห็นด้วยกับข้อมูล 1800 ที่ไม่ใช่ความคิดที่ดี แต่ฉันคิดว่ามันอาจโอเคในบางบริบท (พูดว่าคุณใช้พื้นที่เก็บข้อมูล git-svn และคุณไม่ต้องการให้ไฟล์ git-ish ไปที่ svn) ไฟล์แยกอาจจะดีกว่า
J. Polfer

4
@ehsanul - ไฟล์ต้องไม่ถูกติดตาม (คุณไม่ควรเพิ่มหรือผูกมัดมัน) คุณสามารถยกเลิกการติดตามได้ นี่อาจไม่ใช่ความคิดที่ดีในสภาพแวดล้อมแบบ git เท่านั้น แต่หากคุณเกิดขึ้นเช่นใช้ git เป็นสมาร์ทไคลเอนต์สำหรับพื้นที่เก็บข้อมูลการโค่นล้ม
Tomasz Gandor

2
@IshanSrivastava คุณอาจมีการติดตามไฟล์อยู่แล้ว ลองใช้git rm --cached .gitignore
Gideon

51

นอกจากนี้คุณยังสามารถมีผู้ใช้ทั่วโลกคอมไพล์.gitignoreแฟ้มที่จะนำไปใช้โดยอัตโนมัติไปยังทุก Repos ของคุณ สิ่งนี้มีประโยชน์สำหรับ IDE และไฟล์ตัวแก้ไข (เช่นswpและ*~ไฟล์สำหรับกลุ่ม) เปลี่ยนตำแหน่งไดเรกทอรีให้เหมาะสมกับระบบปฏิบัติการของคุณ

  1. เพิ่มใน~/.gitconfigไฟล์ของคุณ:

    [core]
    excludesfile = /home/username/.gitignore
    
  2. สร้าง~/.gitignoreไฟล์ที่มีรูปแบบไฟล์ที่จะละเว้น

  3. บันทึกจุดไฟล์ของคุณใน repo อื่นเพื่อให้คุณมีการสำรองข้อมูล (ไม่จำเป็น)

เมื่อใดก็ตามที่คุณคัดลอกเริ่มต้นหรือโคลน repo ไฟล์ gitignore ทั่วโลกของคุณจะถูกใช้เช่นกัน


6
ฉันเชื่อว่านี่เป็นทางออกที่ดีที่สุดสำหรับสถานการณ์ที่ผู้แก้ไขของคุณทิ้งไฟล์ temp ไว้เช่น. *. swp (VIM) และ. _ * (TM) เนื่องจากไม่เหมาะสมที่จะเพิ่มกฎเหล่านี้ใน repo git ทุกรายการอย่างต่อเนื่อง และบังคับให้ผู้ใช้รายอื่นที่มี IDE ต่างกันตรวจสอบไฟล์เหล่านี้
Thomas Hunter II

1
วิธีนี้ใช้ได้ผลดีสำหรับการเพิกเฉยที่ไม่ควรผลักไปที่สาขาใด แทนที่ 'ชื่อผู้ใช้' ด้วยชื่อผู้ใช้จริงของคุณแน่นอนและไม่เพิ่มส่วน [core] ที่สองเป็น. gitconfig หากคุณมีอยู่แล้วเพียงแค่วางบรรทัดแยกไฟล์ออกไว้ใต้ส่วน [core] ที่มีอยู่ของคุณ
emery

47

หากใครบางคนได้เพิ่ม.gitignoreไปยัง repo ของคุณแล้ว แต่คุณต้องการทำการเปลี่ยนแปลงบางอย่างและให้ละเว้นการเปลี่ยนแปลงเหล่านั้นทำสิ่งต่อไปนี้:

git update-index --assume-unchanged .gitignore

แหล่ง


5
ความคิดที่ไม่ดีมีเหตุผล.git/info/excludesอยู่
Arrowmaster

6
ฉันคิดว่ามันมีเหตุผล--assume-unchangedอยู่เหมือนกัน ทำไมคนหนึ่งถึงดีกว่าอีกคนหนึ่ง?
Leif Gruenwoldt

9
และ btw .git/info/excludesไม่ทำงานหากไฟล์ถูกติดตามอยู่แล้ว
Leif Gruenwoldt

สิ่งนี้ช่วยฉันด้วย. gignignore ที่มีความมุ่งมั่นแล้วและฉันไม่ต้องการที่จะเปลี่ยนแปลง ฉันใช้ git 1.7.4.1 จาก Ubuntu 11.04 repos และหน้าความช่วยเหลือเพิ่มใน update-index "ตัวเลือกนี้ยังสามารถใช้เป็นกลไกระดับไฟล์หยาบเพื่อเพิกเฉยต่อการเปลี่ยนแปลงที่ไม่มีข้อผูกมัดในไฟล์ที่ติดตาม (คล้ายกับสิ่งที่. gitignore ทำกับไฟล์ที่ไม่ได้ติดตาม) Git จะล้มเหลว (อย่างสง่างาม) ในกรณีที่จำเป็นต้องแก้ไขไฟล์นี้ในดัชนี เช่นเมื่อรวมในการคอมมิชชันดังนั้นในกรณีที่ไฟล์ที่ไม่ถูกติดตามสันนิษฐานว่ามีการเปลี่ยนแปลงต้นน้ำคุณจะต้องจัดการสถานการณ์ด้วยตนเอง "
YonahW

ฉันลงคะแนนสำหรับคำตอบนี้ 'โดยทั่วไปคุณจะต้องดำเนินการนี้สำหรับสถานะเริ่มต้นของ repo หลักของคุณและรักษาประโยชน์ของการใช้งานคอมไพล์ ไม่มีเหตุผลที่ดีที่จะเพิกเฉยต่อไฟล์นี้ (ช่วงเวลา)
Lazaros Kosmidis

37

หลังจากคุณเพิ่ม.gitignoreไฟล์และคอมมิทไฟล์มันจะไม่ปรากฏในรายการ "ไฟล์ที่ไม่ได้ติดตาม"

git add .gitignore
git commit -m "add .gitignore file"
git status

20

เพียงใส่คนอื่นมีความเจ็บปวดเหมือนที่เรามี เราต้องการยกเว้นไฟล์ที่ถูกคอมมิทแล้ว

โพสต์นี้มีประโยชน์มากขึ้น: การทำงานกับ. git / info / ยกเว้นสายเกินไป

สิ่งที่คุณต้องเพิกเฉยต่อไฟล์นั้นจริงๆแล้วใช้คำสั่ง git remove ดูgit rm ( http://www.kernel.org/pub/software/scm/git/docs/git-rm.html )

คุณทดสอบโดยไป

git rm --dry-run *.log
(ถ้าคุณบอกว่าต้องการยกเว้นไฟล์บันทึกทั้งหมด)

สิ่งนี้จะแสดงผลสิ่งที่จะถูกแยกออกถ้าคุณวิ่ง

แล้วก็

คุณเรียกใช้โดยไป

git rm *.log
(หรือเส้นทาง / ชื่อไฟล์ที่คุณต้องการ)

จากนั้นเพิ่ม*.logบรรทัดลงใน.gitignoreไฟล์ของคุณ


4
แน่นอนคุณอาจต้องการติดตามด้วยการเพิ่มรูปแบบที่เกี่ยวข้อง (เช่น * .log) ใน. gitignore ของคุณดังนั้นพวกเขาจึงไม่เกะกะgit statusหากพวกเขาปรากฏตัวในอนาคต
Patrick O'Leary

2
แม้ว่าปัญหาของฉันไม่ได้เกี่ยวข้องกับ OP เหมือนกัน: ขอบคุณที่ให้ฉันรู้ว่าฉันจะต้องใช้ RM เพื่อ "ล้าง" repo ของฉันหลังจากที่ฉันทำการเปลี่ยนแปลง. gitignore (หากไฟล์นั้นมาแล้ว) ข้อผิดพลาด Noob ฉันรู้ แต่นี่เป็นสถานที่แรกที่ฉันได้เห็นใครพูดถึง
Mike

ขอบคุณสำหรับความคิดเห็น. ใช่นั่นเป็นเหตุผลที่ฉันเขียนมันมาที่นี่แล้วจากนั้นไปไกลเพื่อแก้ไขเรื่องนี้ด้วยคิดว่าคงจะเป็นการดีถ้าเขียน :)
วิวัฒนาการ

16

แน่นอนไฟล์. gitignore แสดงสถานะเนื่องจากไม่ได้ติดตามและ git เห็นว่าเป็นไฟล์ใหม่ที่อร่อยที่จะกิน!

เนื่องจาก. gitignore เป็นไฟล์ที่ไม่ได้ติดตามดังนั้นจึงเป็นตัวเลือกที่จะถูกละเว้นโดย git เมื่อคุณใส่ใน. gitignore!

ดังนั้นคำตอบนั้นง่ายเพียงแค่เพิ่มบรรทัด:

.gitignore # Ignore the hand that feeds!

ถึงไฟล์. gitignore ของคุณ!

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

สำหรับการอ้างอิงตรวจสอบgitignore (5) manpageบน kernel.org


15

แนวคิดคือการวางไฟล์ที่มีเฉพาะสำหรับโครงการของคุณลงใน.gitignoreไฟล์และ (ดังที่ได้กล่าวไว้แล้ว) เพิ่มลงในที่เก็บ ตัวอย่าง.pycและ.oไฟล์บันทึกที่การทดสอบสร้างขึ้นการแข่งขันบางอย่าง ฯลฯ

สำหรับไฟล์ที่การตั้งค่าของคุณสร้าง แต่ไม่จำเป็นต้องปรากฏสำหรับผู้ใช้ทุกคน (เช่น.swpไฟล์หากคุณใช้เสียงเรียกเข้า, ไดเรกทอรี ecplise ที่ซ่อนอยู่และสิ่งที่คล้ายกัน) คุณควรใช้.git/info/exclude(ดังที่ได้กล่าวไว้แล้ว)


14

ก่อนอื่นตามที่คนอื่น ๆ บอกแล้วคุณ.gitignoreควรถูกติดตามโดย Git (และไม่ควรเพิกเฉย) ให้ฉันอธิบายว่าทำไม

(TL; DR: ส่ง.gitignoreไฟล์และใช้โกลบอล.gitignoreเพื่อข้ามไฟล์ที่สร้างโดย IDE หรือระบบปฏิบัติการของคุณ)

Git เป็นคุณอาจจะรู้อยู่แล้วว่าเป็นระบบการควบคุมเวอร์ชันกระจาย ซึ่งหมายความว่าจะช่วยให้คุณสามารถสลับไปมาระหว่างเวอร์ชันต่าง ๆ (แม้ว่าการพัฒนาจะแยกออกเป็นสาขาต่าง ๆ ) และยังช่วยให้นักพัฒนาหลายคนสามารถทำงานในโครงการเดียวกันได้

แม้ว่าการติดตามของคุณ.gitignoreจะมีประโยชน์เมื่อคุณสลับระหว่างสแน็ปช็อตเหตุผลที่สำคัญที่สุดในการยืนยันคือคุณจะต้องการแชร์ไฟล์กับนักพัฒนาคนอื่น ๆ ที่ทำงานในโครงการเดียวกัน ผู้ใช้รายอื่นจะได้รับ.gitignoreไฟล์โดยอัตโนมัติเมื่อทำการโคลนพื้นที่เก็บข้อมูลดังนั้นพวกเขาจึงไม่ต้องกังวลกับการส่งไฟล์โดยไม่ตั้งใจ (เช่นไฟล์บันทึก, ไดเรกทอรีแคช, ข้อมูลรับรองฐานข้อมูล) ฯลฯ ) และหากถึงจุดหนึ่งที่โครงการได้.gitignoreรับการปรับปรุงพวกเขาสามารถดึงการเปลี่ยนแปลงเหล่านั้นแทนที่จะต้องแก้ไขไฟล์ด้วยตนเอง

แน่นอนว่าจะมีไฟล์และโฟลเดอร์บางอย่างที่คุณต้องการละเว้น แต่เฉพาะเจาะจงสำหรับคุณและไม่ได้ใช้กับผู้พัฒนารายอื่น .gitignoreอย่างไรก็ตามผู้ที่ไม่ควรจะเป็นในโครงการ มีอีกสองที่ที่คุณสามารถละเว้นไฟล์และโฟลเดอร์:

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

การกล่าวขวัญถึงระดับโลกที่ดี.gitignore
Gruber

ฉันคิดว่าหลังจากตั้งค่าเริ่มต้นแล้วควรลบไฟล์. gitignore ดังนั้นจึงไม่มีการเปลี่ยนแปลงโดยไม่ตั้งใจ ไม่ได้หมายความว่ามันไม่สามารถเปลี่ยนแปลงได้อีกต่อไป แต่มันได้รับการปกป้องจากอุบัติเหตุในทางใดทางหนึ่ง อุบัติเหตุในไฟล์ดังกล่าวสามารถก่อให้เกิดความสับสนหรือเป็นอันตรายต่องานบางอย่างดังนั้นควรพิจารณาการ "ปิดผนึก" (ไม่สนใจตัวเอง) ด้วย
Sasa

@Sasa .gitignoreใช้งานได้เฉพาะกับไฟล์ที่ไม่ได้ติดตามโดย Git เท่านั้น การเพิ่มไฟล์ที่ถูกติดตามไปแล้ว.gitignoreจะไม่ทำให้คุณไม่สามารถทำการเปลี่ยนแปลงไฟล์นั้นได้ แม้ว่าจะเป็นไปได้ แต่คุณจะยอมรับการเปลี่ยนแปลงอย่างไร.gitignoreเมื่อให้ Git เพิกเฉยตัวเอง?
Nic Wortel

@Nic - ฉันได้ส่งคำอธิบายโดยละเอียดไปยังมุมมองของฉันในการตอบแยกต่างหาก @ ด้านล่างของหัวข้อนี้
Sasa

12

ระวัง "ปัญหา" ต่อไปนี้บางครั้งคุณต้องการเพิ่มไดเรกทอรี แต่ไม่มีไฟล์ภายในไดเรกทอรีเหล่านั้น ทางออกที่ง่ายคือการสร้าง. gitignore ด้วยเนื้อหาดังต่อไปนี้:

*

ตะเข็บนี้ทำงานได้ดีจนกว่าคุณจะทราบว่าไม่ได้เพิ่มไดเรกทอรี (ตามที่คาดไว้ในที่เก็บของคุณเหตุผลที่ว่า. gitignore จะถูกละเว้นด้วยและทำให้ไดเรกทอรีนั้นว่างดังนั้นคุณควรทำสิ่งนี้ :

*
!.gitignore

9

ดูเหมือนว่าจะใช้งานได้เฉพาะกับไดเรกทอรีปัจจุบันของคุณGitเพื่อข้ามไฟล์ทั้งหมดจากที่เก็บ

อัปเดตไฟล์นี้

.git/info/exclude 

ด้วยไวลด์การ์ดหรือชื่อไฟล์ของคุณ

*pyc
*swp
*~

5

หากคุณได้ตรวจสอบใน. gitignore แล้วและคุณต้องการเพิกเฉยต่อการแก้ไขให้ลองดูคำตอบนี้ :

ลองใช้คำสั่งนี้:

git update-index --assume-unchanged FILENAME_TO_IGNORE

หากต้องการย้อนกลับ (ถ้าคุณต้องการยอมรับการเปลี่ยนแปลง) ให้ใช้:

git update-index --no-assume-unchanged

อัปเดต :

ต่อไปนี้เป็นวิธีแสดงรายการไฟล์'ถือว่าไม่เปลี่ยนแปลง'ภายใต้ไดเรกทอรีปัจจุบัน:

git ls-files -v | grep -E "^[a-z]"

เป็น-vตัวเลือกที่จะใช้ตัวอักษรพิมพ์เล็กสำหรับไฟล์ 'ถือว่าไม่เปลี่ยนแปลง'


4

ในกรณีของฉันฉันต้องการยกเว้นไฟล์ที่มีอยู่ การแก้ไข. gitignoreเท่านั้นไม่ทำงาน ฉันทำตามขั้นตอนเหล่านี้:

git rm --cached dirToFile/file.php
vim .gitignore
git commit -a

ด้วยวิธีนี้ฉันทำความสะอาดจากแคชไฟล์ที่ฉันต้องการที่จะแยกออกและหลังจากที่ผมเพิ่มไปยัง.gitignore


ทางออกที่ดีที่สุดสำหรับฉัน คุณสามารถใช้ git add ได้ ในสถานที่ที่สองหลังจากคอมไพล์ที่กระทำ -m "ซ่อม. gitignore"
ระดมสมอง

3

นำทางไปยังไดเรกทอรีฐานของ repo git ของคุณและดำเนินการคำสั่งต่อไปนี้:

echo '\\.*' >> .gitignore

ไฟล์จุดทั้งหมดจะถูกละเว้นรวมถึง. DS_Store ที่น่ารำคาญถ้าคุณใช้ mac


4
ฉันจะไม่ทำอย่างนั้น อาจมีไฟล์จุดที่คุณต้องการ ฉันจะเพิ่ม. gitignore และ. DS_Store แทน
Edward Falk

2

มีความเป็นไปได้ค่อนข้างมากที่ผู้ใช้ปลายทางต้องการให้ Git เพิกเฉยต่อไฟล์ ".gitignore" เพียงเพราะโฟลเดอร์เฉพาะของ IDE ที่สร้างโดย Eclipse อาจไม่เหมือนกับ NetBeans หรือ IDE อื่น ดังนั้นเพื่อให้ซอร์สโค้ด IDE เป็นปรปักษ์กันมันทำให้ชีวิตง่ายขึ้นที่จะมีคอมไพล์แบบกำหนดเองที่ไม่ได้แชร์กับทีมทั้งหมดเนื่องจากนักพัฒนาแต่ละคนอาจใช้ IDE ที่แตกต่างกัน


1

.gitignore เกี่ยวกับการเพิกเฉย ไฟล์อื่น ๆ git เป็นเรื่องเกี่ยวกับไฟล์ดังนั้นนี่เป็นเรื่องของการละเว้นไฟล์ อย่างไรก็ตามเนื่องจาก git ใช้งานได้กับไฟล์ไฟล์นี้จะต้องมีเป็นกลไกในการแสดงชื่อไฟล์อื่น

ถ้ามันถูกเรียกว่า .the_list_of_ignored_filesมันอาจจะชัดเจนกว่านี้เล็กน้อย

การเปรียบเทียบคือรายการของสิ่งที่ต้องทำที่คุณไม่ต้องการทำ นอกจากว่าคุณจะอยู่ที่ไหนสักแห่งก็เป็นรายการ 'สิ่งที่ต้องทำ' ที่คุณไม่รู้จัก


1

ฉันคิดว่ามีสถานการณ์ที่ละเลย. gitignore มีประโยชน์มาก ตัวอย่างเช่นเมื่อคุณมีหลายทีมหรือทีมใหญ่ที่ทำงานบน codebase เดียวกัน ในกรณีดังกล่าวคุณต้องมีการประชุมบางอย่างหนึ่งในการประชุมเหล่านั้นเกี่ยวข้องกับสิ่งที่ถูกเพิกเฉยที่ repo คอมไพล์ โดยปกติจะเกี่ยวกับการเพิกเฉยไฟล์และไดเรกทอรีที่สร้างโดย IDE หรือ OS, บันทึกที่สร้างขึ้นบางรายการ ฯลฯ

อย่างไรก็ตามมีแรงที่ทำให้เกิดการเปลี่ยนแปลงที่ไม่ธรรมดา .gitignoreไฟล์ .gitignoreไฟล์สามารถเปลี่ยนแปลงได้ต่อไปโดยคนที่ขาดความรับผิดชอบโดยไม่ได้ตั้งใจโดยเครื่องมือที่ใช้หรือในกรณีอื่น ๆ

หากต้องการมีแรงต่อต้านจากสิ่งนี้เราสามารถทำดังนี้:

  1. . gitignore เริ่มต้นควรสะท้อนถึงการประชุมในทีม
  2. หลังจากถูกพุชแล้ว. gitignore ควรจะปลอดภัยโดยเพิ่มรายการ. gitignore และผลักดันการเปลี่ยนแปลงนั้นอีกครั้ง.gitignoreไฟล์จะถูก " ปิดผนึก " ด้วยวิธีนี้

" ปิดผนึก ".gitignoreไฟล์สามารถเปลี่ยนแปลงได้เพียงแค่ในประเทศโดยไม่ต้องขยายพันธุ์ที่เปลี่ยนสมาชิกคนอื่น ๆ ของทีมงาน (s) อย่างไรก็ตามหากการเปลี่ยนแปลงได้รับการยอมรับอย่างกว้างขวางทั่วทั้งทีมมากกว่าที่เป็นไปได้ที่จะ "ไม่เปิดเผย" ให้เปลี่ยนและมากกว่า "ปิดผนึก" อีกครั้ง ไม่สามารถทำได้โดยไม่ตั้งใจเพียง แต่ตั้งใจ

น่าเศร้าที่คุณไม่สามารถได้รับการปกป้อง 100% จากความโง่เขลา แต่วิธีนี้คุณได้ทำทุกอย่างเท่าที่ทำได้เพื่อป้องกันไม่ให้สิ่งที่โง่เกิดขึ้น

หากคุณมีทีมงานที่ค่อนข้างเล็กและมีมืออาชีพที่ดีมาก ๆ นอกเหนือจากนี้จะไม่สำคัญ แต่แม้แต่คนเหล่านั้นก็ยินดีที่จะมีสิ่งหนึ่งที่ไม่ต้องกังวล

การใช้ .git/info/excludeนั้นเจ๋งเมื่อคุณไม่สามารถทำอะไรเกี่ยวกับการตั้งค่าโครงสร้างพื้นฐานเพียงแค่ปิดบัง ** ของคุณเองเพื่อไม่ให้เกิดข้อผิดพลาด

จากจุดยืนของสิ่งที่ถูกและผิดฉันกำลังลงคะแนนให้มีรายการ. gitignore ใน.gitignoreไฟล์ให้ทุกคนมีอิสระที่จะทำในสิ่งที่พวกเขาต้องการ แต่ไม่บุกรุกผู้อื่น


0

ฉันพบว่าสถานที่ที่ดีที่สุดในการตั้งค่าการเพิกเฉยต่อ.DS_Storeไฟล์ที่น่ารำคาญอยู่ใน.git/info/excludeไฟล์

IntelliJ ดูเหมือนว่าจะทำโดยอัตโนมัติเมื่อคุณตั้งค่าที่เก็บ git ในนั้น


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