วิธีการ. gitignore ไฟล์แบบวนซ้ำ


106

ฉันพยายามหลีกเลี่ยงรูปแบบต่อไปนี้ใน.gitignoreไฟล์ของฉัน

MyPrject/WebApp/Scripts/special/*.js
MyPrject/WebApp/Scripts/special/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*.js
MyPrject/WebApp/Scripts/special/*/*/*/*/*/*/*.js

พวกเราเหนื่อย:

MyPrject/WebApp/Scripts/special/**.js
MyPrject/WebApp/Scripts/special/**/*.js

อย่างไรก็ตามสิ่งนี้ไม่ได้ผล นี่คือคอมไพล์บน Windows มีวิธีที่กระชับกว่านี้โดยไม่ต้องทำซ้ำ ๆ หรือไม่?


คำตอบ:


116

จาก git 1.8.2 สิ่งนี้:

MyPrject/WebApp/Scripts/special/**/*.js

ควรทำงานตามคำตอบนี้ . มันใช้งานได้สำหรับฉันใน Windows 7 โดยใช้ Sourcetree 1.6.12.0 และเวอร์ชันของคอมไพล์ที่ติดตั้ง (1.8.4-preview20130916)

ในการ gitignore ทุกไฟล์และโฟลเดอร์ภายใต้ไดเร็กทอรีซ้ำ:

MyPrject/WebApp/Scripts/special/**

ก่อนที่จะ git 1.8 ล่ะ?
ashes999

1
หากคำตอบนี้ใช้ไม่ได้ (บน Windows) ให้เพิ่มอักขระ/ที่จุดเริ่มต้น ตัวอย่าง:/MyProject/WebApp/Scripts/special/**/*.js
batressc

3
ฉันอายที่คำตอบของฉันได้รับการโหวตเพิ่มขึ้นเรื่อย ๆ เมื่อมันเป็นลิงก์ไปยังคำตอบอื่นอย่างแท้จริง
แซม

1
@puk: .gitignoreคำถามนี้อยู่ใน repo root (ไดเร็กทอรีหลักของ/Webapp)
lucid_dreamer

1
คำตอบของคุณดูดี แต่ไม่ได้ผลสำหรับฉันใน Windows 10 ที่มี git 1.9.1 สำหรับการละเว้นไฟล์ทั้งหมดยกเว้น js ในกรณีต่อไปนี้: (บรรทัดแรก) foo/bar/*/*(บรรทัดที่สอง) !foo/bar/**/*.jsมันใช้ได้กับไดเร็กทอรีย่อยระดับเดียวเท่านั้น แต่ไม่สามารถเรียกซ้ำได้
LLL

19

ติดตามหน้าคู่มือ gitignore:

[... ] git ถือว่ารูปแบบเป็นเชลล์โกลที่เหมาะสำหรับการบริโภคโดย fnmatch (3) ด้วยแฟล็ก FNM_PATHNAME: สัญลักษณ์แทนในรูปแบบจะไม่ตรงกับ / ในชื่อพา ธ

ดังนั้นนี้ยืนอย่างชัดเจนว่ามีวิธีที่จะระบุไม่มีจำนวนหนึ่งของไดเรกทอรีระหว่างสองสายเช่นระหว่างและspecialjs

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

*.js

ณ สถานที่ต่อไปนี้

MyPrject/WebApp/Scripts/special/.gitignore

จะเพียงพอหรือไม่


ผมเคยมีMyPrject/WebApp/Scripts/special*.jsและมันจับคู่เช่นเดียวกับMyPrject/WebApp/Scripts/specialfile.js MyPrject/WebApp/Scripts/special/a/b/c/file.jsอย่างไรก็ตามด้วยเหตุผลบางประการพฤติกรรมเปลี่ยนไปและวิธีแก้ปัญหาปัจจุบันของฉันคือการแสดงรายการไดเรกทอรีทีละรายการ ฉันใช้ GitHub สำหรับ Windows
orad

1
เช่นfind MyPrject/WebApp/Scripts/special -type d -printf 'echo "*.js" >> %h/.gitignore\n git add %h/.gitignore\n' | sh
jthill


0

ลองเรียกใช้git rm -r --cached MyPrject/WebApp/Scripts/special/ ไดเร็กทอรีที่กล่าวถึงของคุณอาจถูกแคชโดย git และจะปรากฏในไฟล์ที่ไม่ได้ติดตาม .gitignoreหลังจากล้างแคชที่ทำให้แน่ใจว่าคุณได้กล่าวถึงใน

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