Git ไม่สนใจไฟล์ที่ไม่ได้อยู่ใน gitignore


117

ฉันมีเก็บคอมไพล์ที่ถูกละเลยไฟล์ภาพเช่นเดียวกับไฟล์อื่น ๆ ไม่กี่ แต่ฉัน.gitignoreไฟล์มีเพียง แต่มันไม่สนใจconfig.phpไฟล์ มีไฟล์การเพิกเฉยทั่วโลกบางไฟล์ที่ดูเหมือนจะหาไม่เจอหรือไม่? ฉันต้องระบุไฟล์เพื่อเพิ่มตอนนี้และมันก็เตือนฉันว่า:

เส้นทางต่อไปนี้จะถูกละเว้นโดยไฟล์. gitignore ของคุณ

เนื้อหาใน~/.gitconfigไฟล์ของฉันเป็นเพียงที่อยู่อีเมลของฉัน


ที่เกี่ยวข้อง: stackoverflow.com/questions/12144633/…
krlmlr

คำตอบ:


198

git check-ignore

ใช้git check-ignoreคำสั่งเพื่อดีบักไฟล์ gitignore ของคุณ (ไม่รวมไฟล์)

ตัวอย่างเช่น:

$ git check-ignore -v config.php
.gitignore:2:src    config.php

รายละเอียดเอาต์พุตด้านบนเกี่ยวกับรูปแบบการจับคู่ (ถ้ามี) สำหรับแต่ละชื่อพา ธ ที่กำหนด (รวมถึงบรรทัด)

ดังนั้นนามสกุลไฟล์ของคุณอาจไม่ถูกละเว้น แต่ทั้งไดเร็กทอรี

รูปแบบที่ส่งคืนคือ:

<source> <COLON> <linenum> <COLON> <pattern> <HT> <pathname>

หรือใช้คำสั่งต่อไปนี้เพื่อพิมพ์.gitignoreในหน้าแรกของผู้ใช้และโฟลเดอร์ที่เก็บ:

cat ~/.gitignore "$(git rev-parse --show-toplevel)"/.gitignore "$(git rev-parse --show-toplevel)"/.git/info/exclude

หรือใช้วิธีอื่นgit add -fที่อนุญาตให้เพิ่มไฟล์ที่ถูกละเว้น

ดู: man gitignore, man git-check-ignoreสำหรับรายละเอียดเพิ่มเติม

วากยสัมพันธ์

git check-ไม่สนใจ [ตัวเลือก] ชื่อพา ธ ...

git ตรวจสอบละเว้น [ตัวเลือก] --stdin


5
สิ่งนี้ดีกว่าคำตอบที่ได้รับการยอมรับมาก ไม่มีความผิดกับคนนั้น แต่สิ่งนี้ช่วยวันของฉัน ขอบคุณ kenorb.
luanjunyi

1
สมควรได้รับการโหวตมากขึ้น พบว่า gitignore แปลก ๆ ในบาง / vendor / โฟลเดอร์ทำให้เกิดปัญหากับ git เวอร์ชันล่าสุด
Manuel Arwed Schmidt

2
สิ่งนี้ช่วยฉันในวันนี้ ... ดูเหมือนว่าสตูดิโอภาพสร้างไฟล์ชื่อ gitignore_global.txt ในโฟลเดอร์เอกสารผู้ใช้และนี่เป็นการละเว้นไฟล์ที่ฉันไม่สามารถ (ยกเลิก) เพิกเฉยได้
ซามูเอล

1
แก้ไขปัญหาของฉันได้อย่างสมบูรณ์แบบ บางลายไม่ง่ายที่จะดึงดูดสายตา !!
Willa

54

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

git config core.excludesfile

หากพิมพ์เส้นทางไฟล์ให้ดูที่เนื้อหาของไฟล์นั้นสำหรับข้อมูลเพิ่มเติม

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


2
นี่เป็นปัญหาของฉันจริงๆ ไม่แน่ใจว่าไฟล์นี้แก้ไขอย่างไรหรือเมื่อใด แต่มีไฟล์ที่ต้องการแสดงอยู่
toxaq

2
ขอบคุณคุณช่วยฉันได้หลายชั่วโมงแห่งความเจ็บปวด ในกรณีของฉันมันเป็นการติดตั้งซอร์สทรี (เครื่องมือแสดงภาพ git repo) ซึ่งสร้างขึ้นอย่างผิดกฎหมายภายใต้โฟลเดอร์เอกสาร gitignore_global.txt ซึ่งมีการยกเว้นมากมาย
Mechanical Object

ฉันมีคำสาปเดียวกันที่Icon?ถูกเพิกเฉย
Justin Skiles

นี่เป็นกรณีของฉัน มีกฎค่อนข้างน้อยในไฟล์การละเว้นส่วนกลาง ขอบคุณสำหรับเคล็ดลับ +1
Madness

ฉันมี * .json ในการเพิกเฉยทั่วโลกของฉัน - พูดคุยเกี่ยวกับฝันร้าย - ขอบคุณ!
Jason Perfetto

31

ตรวจสอบสิ่งเหล่านี้:

  1. คุณได้มองหาไฟล์. gitignore อื่น ๆ หรือไม่เนื่องจากอาจมีได้หลายไฟล์

  2. นอกจากนี้ให้ดูที่ REPO / .git / config เพื่อดูว่ามีอะไรอยู่หรือไม่

  3. Repo exclude Local per-repo สามารถเพิ่มลงในไฟล์. git / info / exclude ใน repo ของคุณได้ กฎเหล่านี้ไม่ได้ผูกมัดกับ repo ดังนั้นจึงไม่แชร์กับผู้อื่น วิธีนี้สามารถใช้สำหรับไฟล์ที่สร้างขึ้นในเครื่องซึ่งคุณไม่คาดหวังให้ผู้ใช้รายอื่นสร้างขึ้นเช่นไฟล์ที่สร้างโดยโปรแกรมแก้ไข


ไม่มีไฟล์. gitignore อื่นในที่เก็บและไม่มีสิ่งใดในไฟล์. git / config ที่ละเว้นสิ่งใดเลย .git / info / exclude กำหนดค่าอย่างไร?
Ian Hunter

4
ไม่ชัดเจนว่าทำไมคำตอบนี้จึงถูกทำเครื่องหมายว่าตอบแล้ว ปัญหานี้ได้รับการแก้ไขอย่างไร?
Next Developer

ไม่รวมเป็นปัญหาของฉัน ฉันรู้ว่ามีวิธีอื่นในการเพิกเฉยซึ่งฉันเคยใช้ในอดีต แต่ลืมไปแล้วว่ามันอยู่ที่ไหน
Chucky

22

ฉันมีปัญหาเดียวกัน - ไดเร็กทอรีถูกคอมไพล์ถูกละเว้นด้วยข้อผิดพลาดนี้:

➭ git add app/views/admin/tags/
The following paths are ignored by one of your .gitignore files:
app/views/admin/tags
Use -f if you really want to add them.
fatal: no files added

ในที่สุดฉันก็พบว่าปัญหาของฉันคือเส้นใน~/.gitignore_global:

TAGS

app/views/admin/tagsซึ่งตรงกับเส้นทาง ฉันแก้ไขโดยการเพิ่มเครื่องหมายทับลงในไฟล์ gitignore ส่วนกลาง

/TAGS

และคอมไพล์เริ่มติดตามไดเร็กทอรีของฉันอีกครั้ง


3
+1 สำหรับการทำให้ฉันค้นหารายการที่ตรงกันบางส่วน ... gitignore_global.txt มี "[Rr] elease * /" ซึ่งทำให้ไดเรกทอรี "Releasenotes" ของฉันถูกละเว้น
Trev

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

ผมมีปัญหาเดียวกัน. SourceTree ตั้งค่าไฟล์ ~ / .gitignore_global ในเมนูเครื่องมือ -> รายการตัวเลือก -> แท็บ Git หลังจากที่ฉันทำความสะอาดฟิลด์ Global Ignore list คำสั่ง "git add ... " ใช้งานได้
Kate

ฉันมีปัญหาเดียวกัน ฉันมีhelpไดเร็กทอรีที่ถูกละเลย โชคดีที่ฉันพบคำตอบของคุณค่อนข้างเร็ว
Abdul Sadik Yalcin

9

สำหรับฉันฉันบังเอิญมีสัญลักษณ์แทนในไฟล์ ~ / .gitignore_global ของฉัน อาจจะตรวจสอบที่นั่น?


1
นั่นเป็นปัญหาสำหรับฉัน ฉันมี * .png ที่นั่นไม่รู้ว่ามันไปอยู่ที่นั่นได้อย่างไร
Shahar

3

สิ่งที่ควรลองอีกอย่าง: ฉันมีไดเร็กทอรี B ที่มีที่.gitเก็บของตัวเองซึ่งซ้อนอยู่ภายใต้ไดเร็กทอรีโปรเจ็กต์ A ของฉัน (แต่ไม่ใช่เป็นโมดูลย่อย) ฉันทำการเปลี่ยนแปลงบางอย่างกับ B และต้องการทำให้เป็นโมดูลย่อยโบนาไฟด์ ฉันเชื่อว่า git A เพิกเฉย B โดยอัตโนมัติเนื่องจากมีที่เก็บของตัวเอง (ดูที่เก็บ git ที่ซ้อนกันโดยไม่มีโมดูลย่อย? ) ฉันเปลี่ยนชื่อโฟลเดอร์ B และพยายามโคลนอีกครั้งเป็นโมดูลย่อยและนั่นทำให้ฉันได้รับข้อความแสดงข้อผิดพลาด "ละเว้นโดย. gitignore" วิธีแก้ไขคือลบ .gitออกจาก B


2

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

หากคุณยังคงพบปัญหาให้ตรวจสอบคำตอบนี้ มันช่วยแก้ปัญหาให้ฉันได้

โดยทั่วไปตรวจสอบไฟล์ ~ / .gitignore เหมืองถูกเรียกว่า ~ / .gitignore_global ฉันไม่รู้ว่ามันถูกสร้างขึ้นเมื่อใด ( ฉันไม่ได้สร้างมันขึ้นมาอย่างแน่นอน) แต่ฉันลองตั้งค่าคอมไพล์ที่แตกต่างกันมากมายเมื่อฉันติดตั้งครั้งแรกดังนั้นหนึ่งในนั้นต้องวางไว้ที่นั่น

หวังว่าคำตอบของเขาจะช่วยคุณได้เช่นกัน!


1

อีกเหตุผลหนึ่งในการรับข้อความแสดงข้อผิดพลาดนี้จาก git คือเมื่อดำเนินการgit submodule addคำสั่งในขณะที่คำสั่ง git ก่อนหน้านี้ขัดข้องและออกจากไฟล์ล็อค (สิ่งนี้อาจเกิดขึ้นได้เช่นเมื่อคุณใช้สคริปต์ที่กำหนดเองซึ่งมีคำสั่ง git และคุณไม่ได้สังเกต ความผิดพลาด)

หากคุณดำเนินการคำสั่งgit commitแทนในขณะที่ไม่มีการเปลี่ยนแปลงเงื่อนไขใด ๆ ( git submodule addจะคอยตะโกนว่า.gitignoreไฟล์ของคุณมีตำหนิ) คุณจะเห็นรายงานข้อผิดพลาดอื่นแทน:

$ git commit -a
fatal: Unable to create '..../.git/index.lock': File exists.

If no other git process is currently running, this probably means a
git process crashed in this repository earlier. Make sure no other git
process is running and remove the file manually to continue.

และการลบ lockfile:

rm .git/index.lock

แก้ไขปัญหา (สิ่งนี้เกิดขึ้นกับ git เวอร์ชัน 2.1.0.9736 ซึ่งอาจได้รับการแก้ไขในรุ่น git ในอนาคต)


ขอบคุณสิ่งนี้กลายเป็นปัญหาที่ฉันพบ ประหยัดชีวิต!
JDawgg

1

ตรวจสอบว่าคุณมีสิทธิ์ในโฟลเดอร์ ฉันเพิ่งพบสิ่งนี้และเป็นเพราะโฟลเดอร์นี้เป็นของผู้ใช้ www-data ไม่ใช่ผู้ใช้ที่ฉันเข้าสู่ระบบเทอร์มินัลด้วย


1

ในกรณีของฉันมันเป็นการเฉือนไปข้างหน้าในเส้นทางของฉันที่ทำให้เกิดปัญหา ...

ไม่ทำงาน

/srv/bootstrap/

งาน

srv/bootstrap/

1

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


1

อาจไม่ใช่.gitignore: skip-worktreeและassume-unchanged

ไฟล์อาจถูกละเว้นเนื่องจากสาเหตุต่อไปนี้:

  1. .gitignore (การรวมกันของพวกเขาทั้งหมด)
  2. git update-index --skip-worktree
  3. git update-index --assume-unchanged

นอกจากนี้ไฟล์อาจไม่ได้รับการรับรองหากอยู่ในไฟล์ .gitignoreและถูกจัดเตรียมไว้แล้วในดัชนี / แคช

ในการตรวจสอบกรณีที่ระบุไว้ด้านบน:

  1. สำหรับสองกรณีที่.gitignoreไม่รวมให้เปรียบเทียบผลลัพธ์ของ:

    • git check-ignore --verbose --non-matching --no-index file1 file2 file3
    • git check-ignore --verbose --non-matching file1 file2 file3
  2. git ls-files file1 file2 file3 | grep -E '^S'

  3. git ls-files file1 file2 file3 | grep -E '^[[:lower:]]'

ยากเกินไปแค่ตั้งนามแฝงให้ฉัน!

นามแฝงต่อไปนี้จะครอบคลุมกรณีทั้งหมดที่ระบุไว้ข้างต้น:

ignore = !"bash -c 'diff --unified=999999999 --color=always <(git check-ignore --verbose --non-matching --no-index \"$@\") <(git check-ignore --verbose --non-matching \"$@\")' - \"$@\" | tail -n+4; git ls-files -v \"$@\"| grep -E '^(S|[[:lower:]])' # Print ignore status of arguments. Files included by index are tagged with prepended '+'. ls-files S means update-index --skip-worktree, and lower first letter means --assume-unchanged."

ความคิดเห็นและขั้นสุดท้าย"เป็นส่วนหนึ่งของบรรทัดที่จะคัดลอกไปยัง.gitconfigไฟล์.

การใช้งาน:

git ignore file1 file2 file3

0

โปรดตรวจสอบ~/.gitignoreและ~/.gitignore_globalที่อาจจะสร้างขึ้นโดยลูกค้าบางส่วนที่ Git (เช่น Atlassian SourceTree บน Mac OS X)


0

ตรวจสอบว่า.gitignoreไฟล์ไม่เพิกเฉยต่อตัวเอง ข้อผิดพลาดทั่วไปคือการเพิ่ม*กฎลงใน.gitignoreไฟล์เพื่อละเว้นทุกไฟล์ในโฟลเดอร์ปัจจุบัน วิธีแก้ปัญหานี้คือการเพิ่มข้อยกเว้นให้กับ.gitignore:

*
!.gitignore

.gitignoreวิธีนี้ไฟล์ทั้งหมดในไดเรกทอรีจะถูกละเว้นยกเว้น

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