เพิ่ม. gitignore ใน gitignore


152

เป็นไปได้ไหมที่จะเพิ่ม.gitignoreไฟล์ลงใน.gitignoreตัวเอง

.gitignore

ไม่ได้ผล

ฉันไม่ต้องการเห็นมันในไฟล์ที่แก้ไข


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

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


คุณสามารถใช้git rm --cached .gitignoreและยกเลิกการติดตาม. gitignore
hassanzadeh.sd

คำตอบ:


187

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

หากคุณต้องการละเว้นไฟล์ในที่เก็บเพียงแห่งเดียว แต่ต้องการหลีกเลี่ยงการคอมมิตรายการละเว้น (ตัวอย่างเช่นไฟล์ส่วนบุคคล) คุณสามารถเพิ่มไฟล์เหล่านั้น.git/info/excludeในที่เก็บนั้นได้

หากคุณต้องการละเว้นไฟล์บางไฟล์ในทุกที่เก็บบนเครื่องของคุณคุณสามารถสร้างไฟล์~/.gitignore_globalแล้วเรียกใช้

git config --global core.excludesfile ~/.gitignore_global

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

ทำไมถึงซับซ้อนเมื่อคำตอบง่ายๆคือ NO
mountainLion

40

ก. gitignore สามารถเพิกเฉยได้หากไม่เคยเช็คอิน:

mhaase@ubuntu:~$ git --version
git version 1.7.9.5
mhaase@ubuntu:~$ git init temp
Initialized empty Git repository in /home/mhaase/temp/.git/
mhaase@ubuntu:~$ cd temp
mhaase@ubuntu:~/temp$ touch .gitignore foo bar baz bat
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       .gitignore
#       bar
#       bat
#       baz
#       foo
mhaase@ubuntu:~/temp$ echo "foo" >> .gitignore
mhaase@ubuntu:~/temp$ echo ".gitignore" >> .gitignore
mhaase@ubuntu:~/temp$ git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       bar
#       bat
#       baz
nothing added to commit but untracked files present (use "git add" to track)

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


2
แน่นอนนี่เป็นกรณีของฉัน ฉันต้องการมีคนในพื้นที่.gitignoreสำหรับทำงานด้วยgit-svnซึ่งไม่มีใครเห็น ฉันก็เลยเพิ่มเข้าไปในตัวมันเองและมันก็ใช้ได้ แต่จากนั้นฉันก็ลองดูว่าคนที่เข้าใจผิดจะอธิบายให้คนอื่นฟังว่า "ไม่ดี" หรือไม่ คำตอบนี้ควรได้รับการยอมรับจากนั้นฉันจะเพิ่มคะแนน.git/info/excludeข้อเสนอแนะด้วย ดังนั้นจึงต้องไม่มีการติดตาม ... ไม่น่าแปลกใจอย่างน้อยถ้าคุณเคยถูก "ล้มล้าง" (svn)
Tomasz Gandor

2
ฉันมี.gitignoreไฟล์สำรองก่อน จากนั้นฉันก็ใช้git rm .gitignoreและยอมรับการเปลี่ยนแปลงนั้น ในที่สุดเพิ่มและคอมมิต.gitignoreไฟล์อีกครั้งด้วยกฎสำหรับ.gitignore. มันได้ผล!
qzhang

5
git rm --cached .gitignoreเพื่อแก้ไขปัญหานี้คุณสามารถเรียกใช้
Gideon

21

ไม่มีเหตุผลที่ดีที่จะทำเช่นนี้ หากคุณต้องการให้ไฟล์ถูกละเว้นสำหรับการโคลนของคุณเท่านั้นให้เพิ่มลง.git/info/excludeใน .gitignoreไฟล์ไม่ใช่


ฉันได้รับ "ไม่สามารถดำเนินการให้เสร็จสิ้นได้เนื่องจากมีการเปลี่ยนแปลงที่มีอยู่ในไฟล์ต่อไปนี้" และไฟล์นั้นแสดงรายการที่ฉันยกเว้นไว้ คิดว่าทำไม?
Paul McCarthy

4

หลังจากคุณป้อน.gitignoreไฟล์ gitignore แล้วให้ลองทำดังต่อไปนี้

git rm -r --cached .
git add --all
git commit -m "ignoring gitignore"
git push --set-upstream origin master

ควรใช้งานได้แม้ว่าจะได้กล่าวไปแล้ว แต่การเพิกเฉยต่อ gitignore อาจเป็นการต่อต้านหากผู้ใช้หลายคนแชร์ repo ของคุณ


2

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

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


ใช่และคุณจะต้องลบแยกต่างหากจากคอมไพล์โดยgot rm --cached .gitignoreอาจเป็นได้
Tadeck

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