คอมไพล์ละเว้นข้อยกเว้น


326

ฉันมีไฟล์ gitignore ที่ทำให้ละเว้น*.dllไฟล์git และนั่นคือพฤติกรรมที่ฉันต้องการ อย่างไรก็ตามหากฉันต้องการข้อยกเว้น (เช่นสามารถยอมรับได้foo.dll) ฉันจะทำสิ่งนี้ได้อย่างไร



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

คำตอบ:


447

ใช้:

*.dll    #Exclude all dlls
!foo.dll #Except for foo.dll

จากgitignore :

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


22
ดูคำตอบในแบบฟอร์ม @Matiss Jurgelis - มันสำคัญยิ่งกว่า
ด่าน

7
ฉันสามารถเพิ่มข้อยกเว้นใน gitignore ของโครงการและไม่ใช่ gitignore ทั่วโลกของฉันได้หรือไม่? ตัวอย่างเช่นหากฉันต้องการรวม DLL ทั้งหมดในไดเรกทอรี gitignore_global ของฉันมี*.dllอยู่ในนั้นและ gitignore ของโครงการของฉันมี!Libs/*.dllแต่ที่ดูเหมือนจะไม่ทำงาน
Joel Kinzel

1
@jkinz !Libs/**/*.dllคุณควรลอง
Rosberg Linhares

@RosbergLinhares หรือ!**/Libs/*.dllขึ้นอยู่กับโครงสร้างของโฟลเดอร์
JAB

2
ขอบคุณ แต่บน Mac เพิ่มความคิดเห็นในบรรทัดเดียวกันกับที่!foo.dllทำให้คำสั่งไม่ถูกต้อง ถ้าฉันเพิ่มความคิดเห็นในแถวที่แยกต่างหากมันใช้งานได้
Giacomo

261

Git จะไม่สนใจโฟลเดอร์หากคุณเขียน:

/js

แต่มันไม่สามารถเพิ่มข้อยกเว้นถ้าคุณทำ: !/js/jqueryหรือ!/js/jquery/หรือ!/js/jquery/*

คุณต้องเขียน:

/js/* 

และมีเพียงคุณเท่านั้นที่สามารถยกเว้นโฟลเดอร์ย่อยเช่นนี้

!/js/jquery

44
นั่นสำคัญมาก ขอบคุณ!
VisioN

3
อย่างไรก็ตามดูเหมือนว่าคุณไม่สามารถเพิ่มโฟลเดอร์ที่ซ้อนกันได้เช่น!/js/jquery/xyzlibจะไม่ถูกเพิกเฉย ...
โง่

2
ดังที่ @Ignorant พูดว่าโฟลเดอร์ที่คุณ "ยกเว้น" จากกฎการเพิกเฉยต้องอยู่ในตำแหน่งเดียวกับ "*"
The Red Pea

3
ดังนั้น/js/*, !/js/jquery, /js/jquery/*, !/js/jquery/xyzlib? รู้สึกเหมือนเป็นวิธีที่ค่อนข้างตลกที่จะทำ ...
274904 คืน

คุณช่วยฉันจริงๆ
Loyea

55

git add -f path/to/foo.dllคุณสามารถเพียงแค่

.gitignore ละเว้นไฟล์สำหรับการติดตามปกติและอื่น ๆ เช่น git add .


4
สำหรับรายละเอียดเพิ่มเติม-fบอกให้คอมไพล์บังคับให้เพิ่มไฟล์นี้ใน repo เพราะมันอาจเพิกเฉยก่อนเพราะของคุณ.gitignore
RPDeshaies

ซึ่งจะดีมากถ้าคุณมีไฟล์เดียวมีประโยชน์น้อยกว่าถ้าคุณต้องการรูปแบบ
Liam


15

เพียงเพิ่ม!ก่อนกฎการยกเว้น

ตามหน้า man gitignore :

รูปแบบมีรูปแบบต่อไปนี้:

...

  • คำนำหน้าเป็นตัวเลือก! ซึ่งขัดแย้งกับรูปแบบ; ไฟล์ที่ตรงกันใด ๆ ที่ยกเว้นโดยรูปแบบก่อนหน้านี้จะถูกรวมอีกครั้ง หากรูปแบบเมื่อตะกี้ตรงนี้จะแทนที่แหล่งที่มาของรูปแบบที่ต่ำกว่า


4

หากคุณกำลังทำงานกับ Visual Studio และ. dll ของคุณจะอยู่ในbinโฟลเดอร์คุณจะต้องเพิ่มข้อยกเว้นสำหรับโฟลเดอร์ bin เฉพาะนั้นเองก่อนที่คุณจะสามารถเพิ่มข้อยกเว้นสำหรับไฟล์. dll เช่น

!SourceCode/Solution/Project/bin
!SourceCode/Solution/Project/bin/My.dll

นี่คือเนื่องจาก.gitignoreแฟ้มVisual Studio เริ่มต้นรวมถึงรูปแบบการละเว้น[Bbin]/

รูปแบบนี้กำลังทำการซิปโฟลเดอร์ bin ทั้งหมด (และดังนั้นเนื้อหาของมัน) ซึ่งจะพยายามรวมเนื้อหาที่ซ้ำซ้อน (เนื่องจากโฟลเดอร์นั้นถูกข้ามไปแล้ว)

ฉันสามารถค้นหาสาเหตุที่ไฟล์ของฉันไม่ได้รับการยกเว้นโดยการทำงาน

git check-ignore -v -- SourceCode/Solution/Project/bin/My.dll

จากหน้าต่าง Git Bash สิ่งนี้คืน[Bbin]/รูปแบบ


2

การแก้ปัญหาขึ้นอยู่กับความสัมพันธ์ระหว่างกฎการเพิกเฉยกับ git และกฎข้อยกเว้น:

  1. ไฟล์ / ไฟล์ในระดับเดียวกัน: ใช้วิธีการแก้ปัญหา @Skilldrick
  2. โฟลเดอร์ / โฟลเดอร์ย่อย: ใช้วิธีการแก้ปัญหา @Matiss Jurgelis
  3. ไฟล์ / ไฟล์ในระดับต่าง ๆ หรือไฟล์ / โฟลเดอร์ย่อย: คุณสามารถทำได้:

    *.suo
    *.user
    *.userosscache
    *.sln.docstates
    
    # ...
    
    # Exceptions for entire subfolders
    !SetupFiles/elasticsearch-5.0.0/**/*
    !SetupFiles/filebeat-5.0.0-windows-x86_64/**/*
    
    # Exceptions for files in different levels
    !SetupFiles/kibana-5.0.0-windows-x86/**/*.suo
    !SetupFiles/logstash-5.0.0/**/*.suo
    

1

เนื่องจาก Git 2.7.0 Git จะคำนึงถึงข้อยกเว้น จากบันทึกประจำรุ่นอย่างเป็นทางการ:

  • อนุญาตให้ "! / abc / def" ในภายหลังแทนที่ "/ abc" ก่อนหน้าซึ่งปรากฏในไฟล์. gitignore เดียวกันเพื่อให้ง่ายต่อการแสดง "ทุกอย่างในไดเรกทอรี / abc จะถูกละเว้นยกเว้นสำหรับ ... "

https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt


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