มีวิธีละเว้นไฟล์ทั้งหมดในไดเรกทอรีหรือไม่?
** เห็นได้ชัดว่าไม่มีความหมายต่อคอมไพล์ดังนั้นจึงใช้งานไม่ได้:
/public/static/**/*.js
แนวคิดคือการจับคู่โฟลเดอร์ที่ซ้อนกันตามอำเภอใจ
มีวิธีละเว้นไฟล์ทั้งหมดในไดเรกทอรีหรือไม่?
** เห็นได้ชัดว่าไม่มีความหมายต่อคอมไพล์ดังนั้นจึงใช้งานไม่ได้:
/public/static/**/*.js
แนวคิดคือการจับคู่โฟลเดอร์ที่ซ้อนกันตามอำเภอใจ
คำตอบ:
ไม่เคยลอง แต่git help ignoreแนะนำว่าถ้าคุณใส่.gitignoreกับ*.jsใน/public/staticมันจะทำสิ่งที่คุณต้องการ
หมายเหตุ: อย่าลืมตรวจสอบคำตอบของ Joey ด้านล่าง: หากคุณต้องการเพิกเฉยไฟล์ในไดเรกทอรีย่อยที่ระบุจากนั้น local .gitignore เป็นทางออกที่ถูกต้อง (ท้องถิ่นนั้นดี) อย่างไรก็ตามถ้าคุณต้องการรูปแบบเดียวกันเพื่อนำไปใช้กับ repo ทั้งหมดของคุณแล้ววิธีแก้ปัญหา ** จะดีกว่า
มันจะปรากฏว่า**ไวยากรณ์การสนับสนุนโดยgitเป็นรุ่น1.8.2.1ตามเอกสาร
เครื่องหมายดอกจัน ("
**") สองอันติดต่อกันในรูปแบบที่ตรงกับชื่อพา ธ เต็มอาจมีความหมายพิเศษ:
เครื่องหมายนำหน้า "
**" ตามด้วยเครื่องหมายสแลชหมายถึงตรงกันในไดเรกทอรีทั้งหมด ตัวอย่างเช่น "**/foo" จับคู่ไฟล์หรือไดเรกทอรี "foo" ได้ทุกที่เหมือนกับรูปแบบ "foo" "**/foo/bar" จับคู่ไฟล์หรือไดเรกทอรี "bar" ได้ทุกที่ที่อยู่ภายใต้ไดเรกทอรี "foo" โดยตรง"" ต่อท้าย
/**ตรงทุกอย่างที่อยู่ภายใน ตัวอย่างเช่น "abc/**" จับคู่ไฟล์ทั้งหมดในไดเรกทอรี "abc" สัมพันธ์กับตำแหน่งของ.gitignoreไฟล์โดยมีความลึกไม่ จำกัดเครื่องหมายทับแล้วตามด้วยเครื่องหมายดอกจันสองตัวต่อจากนั้นเครื่องหมายทับจะจับคู่กับไดเรกทอรีอย่างน้อยหนึ่งไดเรกทอรี ตัวอย่างเช่น "
a/**/b" จับคู่ "a/b", "a/x/b", "a/x/y/b" และอื่น ๆเครื่องหมายดอกจันอื่น ๆ ที่ต่อเนื่องกันถือว่าไม่ถูกต้อง
xxx/**และxxx/คืออะไร
xxx/**กำหนดเป้าหมายไฟล์และไดเรกทอรีทั้งหมดในxxxขณะที่xxx/กำหนดเป้าหมายxxxไดเรกทอรีโดยตรง สิ่งนี้สำคัญมากเมื่อลบรูปแบบด้วย!ในฐานะ "ไม่สามารถรวมไฟล์อีกครั้งได้หากไม่รวมไดเรกทอรีหลักของไฟล์นั้น" ดังนั้นการใช้xxx/*หรือxxx/**จำเป็นในกรณีนั้น
**.js?
อัปเดต: ดูที่คำตอบของ @ Joey : Git สนับสนุน**ไวยากรณ์ในรูปแบบแล้ว วิธีการทั้งสองควรทำงานได้ดี
รูปแบบที่อ่านจากไฟล์. gitignore ในไดเรกทอรีเดียวกันกับพา ธ หรือในพาเรนต์พาเรนต์ใด ๆ ที่มีรูปแบบในไฟล์ระดับที่สูงกว่า มีไฟล์
สิ่งนี้หมายความว่ารูปแบบใน.gitignoreไฟล์ในไดเรกทอรีใด ๆ ของ repo ของคุณจะมีผลกับไดเรกทอรีนั้นและไดเรกทอรีย่อยทั้งหมดไดเรกทอรีย่อยทั้งหมด
รูปแบบที่คุณให้ไว้
/public/static/**/*.js
ไม่ถูกต้องประการแรกเนื่องจาก (ตามที่คุณบันทึกไว้อย่างถูกต้อง) **ไวยากรณ์ไม่ได้ถูกใช้โดย Git นอกจากนี้/แองเคอร์ชั้นนำที่มีรูปแบบเพื่อเริ่มต้นชื่อพา ธ (ดังนั้น/public/static/*.jsจะตรง/public/static/foo.jsแต่ไม่ /public/static/foo/bar.js .) การถอดชั้นนำแก้ไข: เพียงแค่เอาเครื่องหมายทับนำหน้าจะไม่ทำงานเช่นกัน - เนื่องจากรูปแบบยังคงมีเครื่องหมายทับอยู่จึงได้รับการปฏิบัติโดย Git ในรูปแบบเปลือกทรงกลมแบบไม่เรียกซ้ำ (ขอบคุณ@Joey Hoerเพื่อชี้เรื่องนี้)/จะไม่ทำงานอย่างใดอย่างหนึ่งที่ตรงกับเส้นทางที่เหมือนและpublic/static/foo.js foo/public/static/bar.js
ตามที่ @ptyx แนะนำสิ่งที่คุณต้องทำคือสร้างไฟล์<repo>/public/static/.gitignoreและรวมเพียงรูปแบบนี้:
*.js
ไม่มีการนำ/หน้าดังนั้นจึงจะจับคู่ที่ส่วนใดส่วนหนึ่งของเส้นทางและรูปแบบนั้นจะถูกนำไปใช้กับไฟล์ใน/public/staticไดเรกทอรีและไดเรกทอรีย่อยเท่านั้น
/จะไม่ทำงานเช่นเดียวกับเส้นทางที่ตรงกันpublic/static/foo.jsและfoo/public/static/bar.js" เป็นเท็จ ในการอ้างอิงเอกสาร "ถ้ารูปแบบไม่มีเครื่องหมายทับ /, Git จะถือว่าเป็นรูปแบบเชลล์แบบกลมและตรวจสอบการจับคู่กับชื่อพา ธ ที่สัมพันธ์กับตำแหน่งของไฟล์. gitignore (สัมพันธ์กับระดับบนของแผนผังงานถ้า ไม่ได้มาจากไฟล์. gitignore) " จะไม่ได้รับการจับคู่เพราะรูปแบบไม่มีfoo/public/static/bar.js /
หากต้องการเพิกเฉยไฟล์ที่ไม่ได้ติดตามให้ไปที่. git / info / แยก ยกเว้นเป็นไฟล์ที่มีรายการนามสกุลหรือไฟล์ที่ถูกละเว้น
findผมเชื่อว่าทางออกที่ง่ายที่สุดที่จะใช้ ฉันไม่ชอบที่จะมีหลาย ๆรอบที่แขวนอยู่ในไดเรกทอรีย่อยและฉันชอบที่จะจัดการที่ไม่ซ้ำกันระดับบนสุด.gitignore ต้องการทำเช่นนั้นคุณก็สามารถผนวกไฟล์ที่พบเพื่อคุณ.gitignore .gitignoreหากว่าบ้าน/public/static/ของคุณเป็นโครงการ / คอมไพล์ฉันจะใช้:
find . -type f -name *.js | cut -c 3- >> .gitignore
ฉันพบว่าการตัด./จุดเริ่มต้นมักจำเป็นสำหรับ git เพื่อทำความเข้าใจว่าควรหลีกเลี่ยงไฟล์ใด cut -c 3-ดังนั้น