.gitignore ไม่รวมไฟล์ในไดเร็กทอรี แต่ไม่ใช่บางไดเร็กทอรี


98
application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*

ดูเหมือนจะไม่ทำงาน เมื่อฉันโคลนโครงการไม่มี"application/cache"โฟลเดอร์หรือ"application/cache/folder"โฟลเดอร์ ฯลฯ ...

ฉันต้องการถ้าไฟล์ในโฟลเดอร์แคชไม่ได้ถูกแคช แต่มีโฟลเดอร์เพื่อให้การโอนและการอนุญาตของโฟลเดอร์มีอยู่

คำตอบ:


220

Git ไม่ได้ติดตามโฟลเดอร์ แต่เป็นไฟล์เท่านั้นดังนั้นหากคุณเพิกเฉยทุกอย่างในโฟลเดอร์ Git จะไม่มีอะไรให้ติดตาม คุณสามารถเพิ่ม.gitignoreไฟล์แต่ละไดเรกทอรี ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) ที่มีเนื้อหาดังต่อไปนี้:

*
!.gitignore

จากนั้นคุณสามารถเพิ่มไดเร็กทอรีเหล่านั้นและจะเพิ่มเฉพาะ.gitignoreไฟล์ในแต่ละไดเร็กทอรี - แต่นั่นหมายความว่าไดเร็กทอรีจะถูกติดตาม (กล่าวคือสร้างเมื่อโคลนนิ่ง)


7
ไฟล์. gitignore ที่ใช้เพื่อจุดประสงค์นี้อาจว่างเปล่า
kevpie

2
อาจว่างเปล่าหากโฟลเดอร์ถูกละเว้นโดย.gitignoreไฟล์ด้านบน ในกรณีนี้เป็นคำตอบที่แน่นอนของฉัน
KingCrunch

4
มีเหตุผลและง่ายกว่าคือการใช้ไฟล์ชื่อ. gitkeep จากนั้นคุณไม่ต้องวางอะไรลงในไฟล์. gitignore
เม่น

3
@kevpie มีไฟล์อื่นอยู่ในโฟลเดอร์และเขาไม่ต้องการให้ถูกติดตาม หากไฟล์. gitignore ว่างเปล่าไฟล์เหล่านั้นจะถูกติดตามอย่างชัดเจน
maliayas

ด้วยจุดประสงค์เดียวกันฉันใช้.gitkeepแทน.gitignore. มันเข้าท่ากว่าสำหรับฉัน
Éderson T. Szlachta

22

Git ไม่ติดตามไดเร็กทอรีว่าง เพียงเพิ่มไฟล์ตัวยึดที่ว่างเปล่าในโฟลเดอร์ที่คุณต้องการยืนยัน

touch application/cache/.keep
git add -f application/cache/.keep

ทำเช่นนี้กับแต่ละโฟลเดอร์ "ว่าง" หลังจากนั้นคุณสามารถเพิกเฉยต่อไฟล์เหล่านี้ได้ซึ่งมีอยู่จริงเพื่อให้แน่ใจว่า git สร้างไดเรกทอรีเหล่านั้นบนโคลน รายการใน.gitignoreป้องกันไม่ให้มีการติดตามไฟล์อื่น ๆ ภายในโฟลเดอร์ (เว้นแต่คุณจะบังคับด้วยgit add -f;))


16

มีวิธีอื่นที่อาจจะสะอาดกว่านี้ แทนที่จะมีไฟล์ย่อย. gitignore ในโฟลเดอร์ที่คุณต้องการเก็บไว้ คุณสามารถใส่สิ่งนี้ในรูท. gitignore ได้ดังนี้:

application/cache/*
application/cache/folder/*
application/cache/folder/onemorefolder/*
!*.gitkeep

ตอนนี้เพียงแค่สร้างและคอมมิตไฟล์. gitkeep ว่างลงในไดเร็กทอรีตามที่ระบุไว้ด้านบน จากนั้นโฟลเดอร์จะถูกติดตามด้วยไฟล์. gitkeep เหล่านั้น แต่จะไม่มีการติดตามเนื้อหาใด ๆ


2
หรือแค่!*.gitkeep:)
Éderson T. Szlachta

คำถามคือจะเพิกเฉยต่อเนื้อหาของโฟลเดอร์ได้อย่างไร แต่เก็บโฟลเดอร์ไว้เอง ดังนั้นฉันเชื่อว่าคำตอบของฉันยืนอยู่และเพียงแค่มี! *. gitkeep จะไม่เพิกเฉยต่อเนื้อหาของโฟลเดอร์
Joel Duckworth

3

คุณสามารถใส่ไฟล์. gitignore ในแต่ละไฟล์ (เหมือนที่คุณ mipadi พูด) หรือทำอะไรแบบนั้นในไฟล์. gitingnore รูทของคุณ

/assets/*/
/assets/*.*

มันใช้ได้ดีสำหรับฉัน


วิธีนี้ใช้ได้ แต่เฉพาะในกรณีที่ repo ใช้นามสกุลไฟล์ สิ่งที่ชอบroot/LICENSE-FILEจะไม่ถูกยกเว้น
Brett Zamir

2

Visual Studio ไม่ชอบคำตอบที่ยอมรับ ฉันต้องเพิ่มบรรทัดใหม่ก่อน * เพื่อให้มันใช้งานได้

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