มีวิธีละเว้นไฟล์ทั้งหมดในไดเรกทอรีหรือไม่?
**
เห็นได้ชัดว่าไม่มีความหมายต่อคอมไพล์ดังนั้นจึงใช้งานไม่ได้:
/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-
ดังนั้น