ฉันมีไฟล์ gitignore ที่ทำให้ละเว้น*.dll
ไฟล์git และนั่นคือพฤติกรรมที่ฉันต้องการ อย่างไรก็ตามหากฉันต้องการข้อยกเว้น (เช่นสามารถยอมรับได้foo.dll
) ฉันจะทำสิ่งนี้ได้อย่างไร
ฉันมีไฟล์ gitignore ที่ทำให้ละเว้น*.dll
ไฟล์git และนั่นคือพฤติกรรมที่ฉันต้องการ อย่างไรก็ตามหากฉันต้องการข้อยกเว้น (เช่นสามารถยอมรับได้foo.dll
) ฉันจะทำสิ่งนี้ได้อย่างไร
คำตอบ:
ใช้:
*.dll #Exclude all dlls
!foo.dll #Except for foo.dll
จากgitignore :
คำนำหน้าเป็นตัวเลือก! ซึ่งขัดแย้งกับรูปแบบ; ไฟล์ที่ตรงกันใด ๆ ที่ยกเว้นโดยรูปแบบก่อนหน้านี้จะถูกรวมอีกครั้ง หากรูปแบบเมื่อตะกี้ตรงนี้จะแทนที่แหล่งที่มาของรูปแบบที่ต่ำกว่า
*.dll
อยู่ในนั้นและ gitignore ของโครงการของฉันมี!Libs/*.dll
แต่ที่ดูเหมือนจะไม่ทำงาน
!Libs/**/*.dll
คุณควรลอง
!**/Libs/*.dll
ขึ้นอยู่กับโครงสร้างของโฟลเดอร์
!foo.dll
ทำให้คำสั่งไม่ถูกต้อง ถ้าฉันเพิ่มความคิดเห็นในแถวที่แยกต่างหากมันใช้งานได้
Git จะไม่สนใจโฟลเดอร์หากคุณเขียน:
/js
แต่มันไม่สามารถเพิ่มข้อยกเว้นถ้าคุณทำ:
!/js/jquery
หรือ!/js/jquery/
หรือ!/js/jquery/*
คุณต้องเขียน:
/js/*
และมีเพียงคุณเท่านั้นที่สามารถยกเว้นโฟลเดอร์ย่อยเช่นนี้
!/js/jquery
!/js/jquery/xyzlib
จะไม่ถูกเพิกเฉย ...
/js/*
, !/js/jquery
, /js/jquery/*
, !/js/jquery/xyzlib
? รู้สึกเหมือนเป็นวิธีที่ค่อนข้างตลกที่จะทำ ...
git add -f path/to/foo.dll
คุณสามารถเพียงแค่
.gitignore
ละเว้นไฟล์สำหรับการติดตามปกติและอื่น ๆ เช่น git add .
-f
บอกให้คอมไพล์บังคับให้เพิ่มไฟล์นี้ใน repo เพราะมันอาจเพิกเฉยก่อนเพราะของคุณ.gitignore
หากต้องการยกเว้นทุกสิ่งในไดเรกทอรี แต่บางไดเรกทอรีย่อยให้ทำดังนี้:
wp-content/*
!wp-content/plugins/
!wp-content/themes/
เพียงเพิ่ม!
ก่อนกฎการยกเว้น
ตามหน้า man gitignore :
รูปแบบมีรูปแบบต่อไปนี้:
...
- คำนำหน้าเป็นตัวเลือก! ซึ่งขัดแย้งกับรูปแบบ; ไฟล์ที่ตรงกันใด ๆ ที่ยกเว้นโดยรูปแบบก่อนหน้านี้จะถูกรวมอีกครั้ง หากรูปแบบเมื่อตะกี้ตรงนี้จะแทนที่แหล่งที่มาของรูปแบบที่ต่ำกว่า
!foo.dll
ใน. gitignore หรือ (ทุกครั้ง!) git add -f foo.dll
หากคุณกำลังทำงานกับ 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]/
รูปแบบ
การแก้ปัญหาขึ้นอยู่กับความสัมพันธ์ระหว่างกฎการเพิกเฉยกับ git และกฎข้อยกเว้น:
ไฟล์ / ไฟล์ในระดับต่าง ๆ หรือไฟล์ / โฟลเดอร์ย่อย: คุณสามารถทำได้:
*.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
เนื่องจาก Git 2.7.0 Git จะคำนึงถึงข้อยกเว้น จากบันทึกประจำรุ่นอย่างเป็นทางการ:
- อนุญาตให้ "! / abc / def" ในภายหลังแทนที่ "/ abc" ก่อนหน้าซึ่งปรากฏในไฟล์. gitignore เดียวกันเพื่อให้ง่ายต่อการแสดง "ทุกอย่างในไดเรกทอรี / abc จะถูกละเว้นยกเว้นสำหรับ ... "
https://raw.githubusercontent.com/git/git/master/Documentation/RelNotes/2.7.0.txt