Git: ละเว้นไฟล์ที่ถูกติดตาม


182

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

เป็นไปได้ไหม



5
หากไฟล์เหล่านี้ถูกสร้างขึ้นโดยอัตโนมัติโดยการสร้างแล้วพวกเขาไม่ควรติดตามในคอมไพล์
Codebling

นี่คือบทแนะนำสั้น ๆ เกี่ยวกับ gitignore ที่คุณอาจพบว่ามีประโยชน์: learningpassion.wordpress.com/2016/06/17/…
โจ๊กเกอร์

คำตอบ:


283

แน่ใจ

git update-index --assume-unchanged [<file> ...]

วิธียกเลิกและเริ่มติดตามอีกครั้ง:

git update-index --no-assume-unchanged [<file> ...]

3
เกิดอะไรขึ้นกับไฟล์ในสถานะนี้เมื่อฉันดึงไฟล์มาดัดแปลง
haymansfield

2
@haymansfield หน้าความช่วยเหลือสำหรับคำสั่งระบุสิ่งต่อไปนี้Git will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Parham

3
วิธีใดที่จะนำไปใช้--assume-unchangedกับการโคลน? เพื่อให้ผู้ใช้ทุกคนมีไฟล์ แต่ไม่เห็นการเปลี่ยนแปลงในตัวเครื่อง
Gauthier

10
@Tyler - ไม่เมื่อไฟล์ถูกติดตามโดย git มันจะถูกติดตามอยู่เสมอแม้ว่าไฟล์นั้นจะปรากฏใน. gitignore กรณีการใช้งานของฉันคือ "นี่คือเทมเพลตฐานของไฟล์ที่คุณเก็บข้อมูลรับรองไว้
Jon V

5
@watbywbarif ฉันมีคำสั่งgit update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))ตั้งเป็นนามแฝง git เมื่อใดก็ตามที่ฉันสงสัยว่ามันเป็นคนฉลาดบางคนฉันก็ทำอย่างนั้น
Philippe Carphin

6

อีกวิธีหนึ่ง (จากคำตอบที่ถูกลบตอนนี้โดย Seth Robertson แต่ฉันคิดว่ามันมีประโยชน์ดังนั้นการรื้อฟื้นมันใหม่) คือการรักษาไฟล์เทมเพลต "ที่ติดตามไว้" จากนั้นให้มีเวอร์ชันที่ไม่มีการติดตามท้องถิ่นเช่น: config.sample.ini "หรือ" config.ini.template "ดูhttps://gist.github.com/canton7/1423106สำหรับตัวอย่างเต็มรูปแบบ

จากนั้นจะไม่มีข้อกังวลใด ๆ หากไฟล์นั้นมีการเปลี่ยนแปลงภายใน git ฯลฯ และคุณสามารถใช้. gitignore (ในที่สุด) บนไฟล์ที่ไม่ได้ติดตามในเครื่อง


5

โซลูชันอื่นที่ใช้แอตทริบิวต์ git และ% f ในคำสั่ง filter:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude

16
คุณช่วยให้รายละเอียดเพิ่มเติมเกี่ยวกับความหมายและสิ่งที่ทำโดยบังเอิญ?
rogerdpack

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