ละเว้นไฟล์ทั้งหมดซ้ำได้อย่างถูกต้องภายใต้โฟลเดอร์เฉพาะยกเว้นประเภทไฟล์เฉพาะ


89

ฉันเคยเห็นคำถามคล้าย ๆ กัน ( 1 , 2และ3 ) แต่ฉันไม่ได้รับคำตอบที่เหมาะสมจากพวกเขา

ฉันต้องละเว้นไฟล์ทั้งหมดในโฟลเดอร์ใดโฟลเดอร์หนึ่งยกเว้นไฟล์บางประเภท โฟลเดอร์เป็นไดเร็กทอรีย่อยสำหรับรูทพา ธ Resourcesผมขอตั้งชื่อโฟลเดอร์ เนื่องจากฉันไม่ต้องการทำให้สิ่งต่างๆซับซ้อนขอให้ฉันละเว้นไฟล์ในโฟลเดอร์ทั้งหมดที่มีชื่อResourcesไม่ว่าจะอยู่ที่ใด

นี่เป็นวิธีแก้ปัญหาที่พบบ่อยที่สุด (ในคำถามที่ซ้ำกันทั้งหมด)

# Ignore everything
*

# Don't ignore directories, so we can recurse into them
!*/

# Don't ignore .gitignore
!.gitignore

# Now exclude our type
!*.foo

ปัญหาในการแก้ปัญหานี้คือหยุดติดตามไฟล์ที่เพิ่มใหม่ (เนื่องจาก*ละเว้นไฟล์ทั้งหมด) ฉันไม่ต้องการยกเว้นไฟล์แต่ละไฟล์ทุกประเภท ฉันต้องการพฤติกรรมปกติที่หากมีการเพิ่มไฟล์ใหม่จะgit statusแสดงมัน

ในที่สุดผมก็มีวิธีการแก้ปัญหาที่นี่ วิธีแก้ไขคือเพิ่ม.gitignoreไฟล์อื่นในResourcesโฟลเดอร์ ทำงานได้อย่างถูกต้อง

ฉันสามารถบรรลุสิ่งเดียวกันด้วยไฟล์ละเว้นเดียวได้หรือไม่? ฉันพบว่ามีไฟล์ละเว้นจำนวนมากในไดเร็กทอรีที่แตกต่างกันเล็กน้อย

นี่คือสิ่งที่ฉันพยายามจะบรรลุ:

# Ignore everything under Resources folder, not elsewhere
Resources

# Don't ignore directories, so we can recurse into them
!*Resources/

# Now exclude our type
!*.foo

แต่สิ่งนี้ให้ผลลัพธ์ตรงกันข้าม มันละเว้น*.fooประเภทและติดตามไฟล์อื่น ๆ

คำตอบ:


109

@SimonBuchan ถูกต้องครับ

ตั้งแต่ git 1.8.2 ใช้Resources/** !Resources/**/*.fooงานได้


1
สิ่งนี้ใช้ได้กับฉันปรับแต่งเล็กน้อยฉันแค่ต้องลบไดเรกทอรีและทุกอย่างที่อยู่ด้านล่างดังนั้นฉันจึงทำ: DirectoryName1/** DirectoryName1/**/*สำหรับแต่ละคน Firs ลบไดเรกทอรี แต่คุณต้องใช้ครั้งที่สองเพื่อลบไฟล์ทุกประเภท
Scala Enthusiast

27

คำตอบที่ดีที่สุดคือการเพิ่มไฟล์ Resources / .gitignore ภายใต้ทรัพยากรที่มี:

# Ignore any file in this directory except for this file and *.foo files
*
!/.gitignore
!*.foo

หากคุณไม่เต็มใจหรือไม่สามารถเพิ่มไฟล์. gitignore ได้มีวิธีแก้ไขที่ไม่ดี:

# Ignore any file but *.foo under Resources. Update this if we add deeper directories
Resources/*
!Resources/*/
!Resources/*.foo
Resources/*/*
!Resources/*/*/
!Resources/*/*.foo
Resources/*/*/*
!Resources/*/*/*/
!Resources/*/*/*.foo
Resources/*/*/*/*
!Resources/*/*/*/*/
!Resources/*/*/*/*.foo

คุณจะต้องแก้ไขรูปแบบนั้นหากคุณเพิ่มไดเร็กทอรีลึกกว่าที่ระบุ


2
น่าเศร้า .. อันที่จริงฉันจะมีไดเรกทอรีที่ลึกกว่าดังนั้นฉันจะยึดติดกับอันแรก :(
nawfal

ดูรายละเอียดเพิ่มเติมเกี่ยวกับโซลูชันเดียวกันได้ที่นี่: stackoverflow.com/questions/7803689/… - ลิงก์ด้านบนโดย OP @nawfal
ที่นี่

7

อาจดูโง่ แต่ตรวจสอบว่าคุณยังไม่ได้เพิ่มโฟลเดอร์ / ไฟล์ที่คุณพยายามเพิกเฉยในดัชนีมาก่อน หากคุณทำเช่นนั้นไม่สำคัญว่าคุณจะใส่อะไรลงในไฟล์. gitignore ของคุณโฟลเดอร์ / ไฟล์จะยังคงถูกจัดฉาก


5
หากมีคนพบปัญหาการใช้งานเฉพาะนี้คุณสามารถใช้git rm --cached <path to files>เพื่อล้างไฟล์ที่ถูกละเว้นเหล่านั้นออกจากคอมไพล์ในขณะที่ยังคงทิ้งไว้ในระบบไฟล์
slothluvchunk

5

ไม่ว่าฉันจะทำผิดหรือคำตอบที่ยอมรับใช้กับคอมไพล์ปัจจุบันไม่ได้อีกต่อไป

ฉันได้พบจริงการแก้ปัญหาที่เหมาะสมและการโพสต์ภายใต้เกือบคำถามเดียวกันที่นี่ สำหรับรายละเอียดเพิ่มเติมโปรดไปที่นั่น

วิธีการแก้:

# Ignore everything inside Resources/ directory
/Resources/**
# Except for subdirectories(won't be committed anyway if there is no committed file inside)
!/Resources/**/
# And except for *.foo files
!*.foo

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