ฉันพยายามทำความเข้าใจ.gitignore
ไวยากรณ์ให้ชัดเจนยิ่งขึ้นและโดยเฉพาะอย่างยิ่งเท่าที่เกี่ยวข้องกับhttps://github.com/github/gitignore gitignores
ฉันเห็นว่าเครื่องหมายทับนำหน้าใช้เพื่อจับคู่เฉพาะชื่อพา ธ ที่สัมพันธ์กับตำแหน่งของ.gitignore
ไฟล์ (จากhttp://git-scm.com/docs/gitignore ):
เครื่องหมายทับนำหน้าตรงกับจุดเริ่มต้นของชื่อพา ธ ตัวอย่างเช่น "/*.c" ตรงกับ "cat-file.c" แต่ไม่ใช่ "mozilla-sha1 / sha1.c"
แต่จะเกิดอะไรขึ้นเมื่อฉันลบเครื่องหมายทับ เท่าที่ฉันเข้าใจมีสองกรณี:
- หากรูปแบบไม่มีเครื่องหมายทับ (หรือมีเพียงเครื่องหมายทับซึ่งหมายความว่าควรตรงกับไดเร็กทอรี) การค้นหาจะดำเนินการภายในแผนผังไดเร็กทอรีทั้งหมด ตัวอย่างเช่นรูปแบบ
dir/
จะตรงกับ<root>/dir
,<root>/a/dir
,<root>/a/b/c/.../dir
และอื่น ๆ ที่<root>
เป็นที่ตั้งของ.gitignore
ไฟล์ - หากรูปแบบมีเครื่องหมายทับซึ่งไม่อยู่ในตำแหน่งต่อท้าย (ไม่ใช่อักขระตัวสุดท้าย) รูปแบบนั้นจะจับคู่กับชื่อพา ธ ที่สัมพันธ์กับตำแหน่ง
.gitignore
ไฟล์เท่านั้น
นี่คือตัวอย่างที่ฉันทำขึ้นเพื่อตรวจสอบพฤติกรรมนี้:
# Directory structure:
<root>
├─ dir/
│ └─ test
├─ src/
│ ├─ dir/
│ │ └─ test
test file is there only because Git does not track empty directories.
การทดสอบครั้งแรก:
# .gitignore
dir/
# git status
nothing to commit
ดังนั้น Git จึงไม่สนใจdir
ไดเรกทอรีทั้งสอง สิ่งนี้สอดคล้องกับกรณีหมายเลข 1: รูปแบบไม่มีเครื่องหมายทับ (ยกเว้นแบบต่อท้าย) ดังนั้น Git จึงเฝ้าดูแผนผังไดเรกทอรีทั้งหมดโดยไม่สนใจทุกอย่างที่ตรงกับรูปแบบ
การทดสอบครั้งที่สอง:
# .gitignore
/dir/
# git status
Untracked files:
src/
ที่นี่ Git จะละเว้นเฉพาะdir
ไดเร็กทอรีที่อยู่ใต้ไดเร็กทอรีรูทโดยตรงโดยใช้เครื่องหมายทับในรูปแบบ
การทดสอบครั้งที่สาม:
# .gitignore
dir/*
# git status
Untracked files:
src/
สิ่งนี้สอดคล้องกับกรณีที่ 2: รูปแบบมีเครื่องหมายทับอยู่ภายในดังนั้นจึงถือว่าเป็นชื่อพา ธ ที่เริ่มต้นจากไดเรกทอรีราก
ตอนนี้ถึงเวลาสำหรับคำถามที่แท้จริง ลองพิจารณาไฟล์ gitignore นี้ : เมื่อพวกเขาเพิกเฉยต่อไดเร็กทอรีdownloader/
ตัวอย่างเช่นพวกเขาไม่สนใจทุกdownloader
ไดเร็กทอรีเดียวที่พบในแผนผังไดเร็กทอรีทั้งหมดใช่หรือไม่ นี่คือสิ่งที่ฉันถูกผลักดันให้คิดตั้งแต่สิ่งที่ฉันเห็นเกี่ยวกับการทำงานของ Git มาก่อน
ดังนั้นหากฉันมีโมดูลแบบกำหนดเองที่มีdownloader
ไดเร็กทอรีอยู่ภายในโมดูลนั้นจะถูกละเว้นโดยไม่คาดคิดเช่นเดียวกับโมดูลปกติในรูทของ Magento หรือไม่ นี่เป็นคำถามที่เข้าใจผิดเพราะมันเคยเกิดขึ้นแล้วกับฉันทำให้เกิดข้อผิดพลาดที่ยากมาก
ดังนั้นใน.gitignore
ไฟล์Magento (ซึ่งฉันอ้างถึงเป็นเพียงตัวอย่างเท่านั้น btw) รูปแบบจำนวนมากมีเครื่องหมายทับดังนั้นจึงจับคู่ได้อย่างถูกต้องกับชื่อพา ธ ที่เริ่มต้นจากรูท แต่มีบางกรณีเช่นdownloader/
หรือerrors/
นั้น ถ้าฉันไม่ผิดอาจเป็นอันตรายและที่ควรอาจจะเปลี่ยนไปและ/downloader/
/errors/
ตามคำถามทั่วไปฉันควรใช้สแลชนำหน้าเสมอสำหรับรูปแบบที่ไม่มีเครื่องหมายทับ (ยกเว้นเครื่องหมายทับ) เมื่อฉันต้องการเลือกชื่อพา ธ โดยเริ่มจากรูทอย่างชัดเจนและไม่ควรใช้สำหรับรูปแบบที่มีเครื่องหมายทับหรือฉันควร ใช้เครื่องหมายทับเสมอเพื่อความชัดเจน? คุณคิดอย่างไรกับมัน?
ขอบคุณที่อ่านและขอโทษที่โพสต์ยาว