วิธียกเว้นไฟล์จากโฟลเดอร์รากใน Git


399

ฉันตระหนักถึงการใช้.gitignoreไฟล์เพื่อแยกบางไฟล์ที่ถูกเพิ่ม แต่ฉันมีconfig.phpไฟล์หลายไฟล์ในแผนผังต้นไม้และฉันจำเป็นต้องยกเว้นไฟล์เดียวที่อยู่ในรูทในขณะที่อื่น ๆ จะอยู่ภายใต้การควบคุมการแก้ไข

สิ่งที่ฉันควรจะเขียน.gitignoreเพื่อทำให้เกิดขึ้น?

คำตอบ:


588

จากเอกสาร :

หากรูปแบบไม่มีเครื่องหมายทับ /, git จะถือว่าเป็นรูปแบบเชลล์แบบกลมและตรวจสอบการจับคู่กับชื่อพา ธ ที่สัมพันธ์กับตำแหน่งของไฟล์. gitignore (สัมพันธ์กับระดับบนสุดของแผนผังงานหากไม่ใช่จาก. gitignore ไฟล์).

เครื่องหมายทับนำหน้าตรงกับจุดเริ่มต้นของชื่อพา ธ ตัวอย่างเช่น "/*.c" ตรงกับ "cat-file.c" แต่ไม่ใช่ "mozilla-sha1 / sha1.c"

ดังนั้นคุณควรเพิ่มบรรทัดต่อไปนี้ในรูทของคุณ.gitignore:

/config.php

1
ขอบคุณ! ฉันลองด้วยวิธีนี้ แต่ด้วยเหตุผลบางอย่างมันไม่ทำงาน อาจพิมพ์ผิดบางแห่งบางสิ่งบางอย่าง =)
พาเวล Karoukin

1
จะเป็นอย่างไรถ้าไม่ใช่ไฟล์ แต่เป็นโฟลเดอร์และฉันต้องการละเว้นโฟลเดอร์นั้นใน repo root ไฟล์ที่มีอยู่และโฟลเดอร์ย่อยและไฟล์ทั้งหมด /folder/?
CodeManX

11
ไม่ว่าจะทำงาน/folder/หรือไม่/folderแต่เพิ่มเครื่องหมายทับที่ท้าย จำกัด การจับคู่กับโฟลเดอร์เท่านั้น หากคุณมีไฟล์ชื่อ 'foo' ในไดเรกทอรีราก/foo/จะไม่เพิกเฉย แต่/fooจะเป็นเช่นนั้น
tehDorf

ในกรณีที่คุณยอมรับไฟล์แล้วให้เรียกใช้คำสั่งgit rm --cached <file>มิฉะนั้นไฟล์จะไม่ถูกละเว้น จาก: stackoverflow.com/a/1274447
Bruno Polo


29

รุ่นที่เก่ากว่าของคอมไพล์คุณต้องกำหนดรูปแบบการละเว้นและทันที (ในบรรทัดถัดไป) กำหนดการยกเว้น [ทดสอบกับเวอร์ชั่น 1.9.3 (Apple Git-50)]

/config.php
!/*/config.php

รุ่นที่ใหม่กว่าต้องการเฉพาะสิ่งต่อไปนี้ [ทดสอบกับรุ่น 2.2.1]

/config.php

17

หากวิธีการข้างต้นไม่ได้ผลสำหรับคุณให้ลองวิธีนี้:

#1.1 Do NOT ignore file pattern in  any subdirectory
!*/config.php
#1.2 ...only ignore it in the current directory
/config.php

##########################

# 2.1 Ignore file pattern everywhere
config.php
# 2.2 ...but NOT in the current directory
!/config.php

สิ่งนี้ใช้ได้กับฉันจริงๆในขณะที่/config.phpคนเดียวไม่ได้ ฉันอยากรู้ว่าทำไมมันไม่ได้ คุณมีความคิดหรือไม่?
iago-lito 'กำลังพิจารณาที่จะออกเดินทางใน

@ iago-lito ถ้าคุณทำงานกับโปรเจ็กต์บางตัวและพยายามหาวิธีที่จะเพิกเฉยต่อไฟล์บางไฟล์ในไดเรกทอรีหนึ่งและในเวลาเดียวกันเพื่อไม่สนใจมันในทุก ๆ ที่จากนั้นให้ใส่มันลงในไฟล์ /home/me/.gitignore: /home/me/path/to/my/project/some/folder/file.ext หรือ file.ext เพื่อละเว้นไฟล์ทุกที่จากนั้นใน / home / me / path / to / my / project / some / folder / ไฟล์. gitignore ใส่ไฟล์นี้! file.ext เพื่อไม่ให้สนใจไฟล์นี้เฉพาะในไดเรกทอรีนี้ แต่ละโฟลเดอร์สามารถมีไฟล์. gitignore ของตนเองเพื่อแทนที่การตั้งค่าไฟล์. gitignore ใด ๆ ของผู้ปกครอง ...
drugan

ฮึ่ม ซึ่งหมายความว่าธุรกรรมซื้อคืนอาจทำงานแตกต่างกันไปขึ้นอยู่กับว่าผู้ใช้รายอื่นมี~/.gitignoreไฟล์ต่าง ๆในเครื่องของตนเองใช่ไหม .. นอกจากนี้ประเด็นของฉันคือคุณเขียนว่า "หากวิธีการแก้ปัญหาข้างต้นใช้งานไม่ได้" ทำไมถึงไม่
iago-lito 'กำลังพิจารณาที่จะออกเดินทาง

ใช่ถ้าโครงการของคุณอาจมีอยู่ในสภาพแวดล้อมที่ไม่รู้จักคุณไม่ควรพึ่งพาไฟล์. gignignore ที่มีอยู่เหนือโฟลเดอร์รูทโครงการของคุณ โปรดจำไว้ว่าชื่อไฟล์เช่น config.php ค่อนข้างทั่วไปดังนั้นแทนที่การตั้งค่าใด ๆ ที่อาจมีอยู่สำหรับไฟล์นี้ในไฟล์. gitignore รูทของคุณ
drugan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.