อะไรคือความแตกต่างระหว่าง. gitignore และ. gitkeep


1926

อะไรคือความแตกต่างระหว่าง.gitignoreและ.gitkeep? พวกเขาเหมือนกันกับชื่อที่แตกต่างกันหรือว่าพวกเขาทั้งสองทำหน้าที่แตกต่างกัน?

ฉันดูเหมือนจะไม่สามารถค้นหาเอกสารจำนวนมาก.gitkeepได้

คำตอบ:


3439

.gitkeep ไม่ได้ทำเป็นเอกสารเพราะไม่ใช่คุณสมบัติของ Git

Git ไม่สามารถเพิ่มไดเรกทอรีว่างเปล่า ผู้ที่ต้องการติดตามไดเรกทอรีว่างใน Git ได้สร้างหลักการของการวางไฟล์ที่เรียก.gitkeepในไดเรกทอรีเหล่านี้ ไฟล์สามารถเรียกว่าอะไรก็ได้ Git ไม่ได้ให้ความสำคัญเป็นพิเศษกับชื่อนี้

มีวิธีการแข่งขันในการเพิ่ม.gitignoreไฟล์ลงในไดเรกทอรีว่างเปล่าเพื่อรับการติดตาม แต่บางคนมองว่าสิ่งนี้สับสนเนื่องจากเป้าหมายคือการทำให้ไดเรกทอรีว่างไม่สนใจมัน .gitignoreยังใช้เพื่อแสดงรายการไฟล์ที่ Git ควรละเว้นเมื่อค้นหาไฟล์ที่ไม่ได้ติดตาม


414
ไม่ใช่วิธีที่ดีกว่าในการวางREADMEไฟล์ในไดเรกทอรีย่อยที่ว่างเปล่าที่มีข้อมูลเล็กน้อยเกี่ยวกับสิ่งที่ไดเรกทอรีย่อยนั้นจะถูกใช้เพื่อ? ดูเหมือนสับสนว่ามีไฟล์ชื่อ.gitkeepที่ไม่ได้เป็นส่วนหนึ่งของคอมไพล์
tamouse

423
@tamouse หลายครั้งเส้นทางของไดเรกทอรีว่างเปล่า (เช่นชื่อโฟลเดอร์) นั้นเพียงพอที่จะแสดงถึงจุดประสงค์ของมัน (ตัวอย่างเช่นเทมเพลต / แคชอัปโหลด / นิ้วหัวแม่มือ ฯลฯ ) ในกรณีเหล่านี้การใส่ readme ในแต่ละรายการจะทำให้เกิดความซ้ำซ้อน
Halil Özgür

16
ผู้ที่ต้องการติดตามไดเรกทอรีว่างควรระบุใน README ว่าจะต้องสร้างไดเรกทอรีหรือสร้างไดเรกทอรีโดยใช้เครื่องมือสร้างหรือเครื่องมือใด ๆ ที่ต้องมีไดเรกทอรีอยู่ /

32
@tamouse, @omouse: .gitignoreไฟล์ที่มีสองบรรทัด: *และ!.gitignoreมีความชัดเจนเพียงพอที่จะถ่ายทอดสิ่งที่เกิดขึ้น หากต้องการรายละเอียดเพิ่มเติมให้เพิ่มความคิดเห็นไปที่ด้านบนของไฟล์โดยใช้# ไวยากรณ์
Droogans

63
เป็นที่น่าสังเกตว่าเฟรมเวิร์กยอดนิยมของ Rails ได้เปลี่ยนแปลงอนุสัญญานี้โดยใช้.keepไฟล์แทน.gitkeepการเก็บรักษาโฟลเดอร์ว่างเหล่านี้เนื่องจาก git ไม่ใช่ระบบควบคุมแหล่งเดียวที่ไม่ติดตามโฟลเดอร์ว่าง รายละเอียดเพิ่มเติมได้ที่นี่: github.com/rails/rails/issues/2800
Claudio Floreani

330

.gitkeepเป็นเพียงตัวยึดตำแหน่ง ไฟล์จำลองดังนั้น Git จะไม่ลืมเกี่ยวกับไดเรกทอรีเนื่องจาก Git ติดตามเฉพาะไฟล์


หากคุณต้องการไดเรกทอรีที่ว่างเปล่าและตรวจสอบให้แน่ใจว่ามันยังคง 'สะอาด' สำหรับ Git ให้สร้าง.gitignoreบรรทัดต่อไปนี้ภายใน:

# .gitignore sample
###################

# Ignore all files in this dir...
*

# ... except for this one.
!.gitignore

หากคุณต้องการให้ Git มองเห็นไฟล์ประเภทเดียวนี่คือตัวอย่างวิธีการกรองทุกอย่างยกเว้น. gitignore และ.txtไฟล์ทั้งหมด:

# .gitignore to keep just .txt files
###################################

# Filter everything...
*

# ... except the .gitignore...
!.gitignore

# ... and all text files.
!*.txt

('#' หมายถึงความคิดเห็น)


3
ฉันชอบการฝึกฝนนี้ด้วยตัวเอง หากมีซอร์สโค้ดในไดเรกทอรีเหล่านี้จะไม่จำเป็นต้องมี. gitkeep และโดยทั่วไปเป็นเนื้อหาของ temp / cache / user ซึ่งในระหว่างการทดสอบจะถูกสร้างขึ้นอย่างไรก็ตามคุณต้องมี. gitignore ไฟล์เหล่านั้นด้วย
chrisan

1
ทำไมคุณต้อง!อยู่หน้า.gitignore? นั่นคือเพื่อหนีจุดหรือไม่
จะ

7
@ Will - ไม่คัดค้าน!ส่วนต่อไปนี้เหมือนปกติในการเขียนโปรแกรม
sjas

3
ไม่มีความจำเป็นที่จะนำเป็น!.gitignoreในคอมไพล์ไม่สนใจไฟล์ทั้งเพิ่มไฟล์แล้วแก้ไขมันหรือแรงเพิ่มที่มีเนื้อหาที่เหมาะสม ( "*" ที่จะไม่สนใจทุกอย่างหรืออะไรเพียงแค่ให้แน่ใจว่าโฟลเดอร์ที่มีอยู่) ตัวอย่างเพิ่มเติม
AD7six

13
จากลิงค์ของคุณ: Since the git ignore file is already in the repo it is not necessary to not-ignore it - it is already tracked.------ ถ้าไม่ใช่, และคุณไม่เพิ่มพลัง, คุณอาจลืมมันไปได้ ในกรณีเล็ก ๆ น้อย ๆ ไม่มีปัญหา แต่ถ้ามันเป็นไฟล์ที่ใหญ่กว่าคุณอาจอารมณ์เสีย การใช้!.gitignoreจะป้องกันไม่ให้คุณยิงตัวเองด้วยการเดินเท้า ฉันชอบมันมากเมื่อก่อนเผาตัวเอง
sjas

125
.gitignore

เป็นไฟล์ข้อความที่ประกอบด้วยรายการไฟล์ในไดเรกทอรีของคุณที่ git จะละเว้นหรือไม่เพิ่ม / อัพเดทในพื้นที่เก็บข้อมูล

.gitkeep

เนื่องจาก Git ลบหรือไม่เพิ่มไดเรกทอรีว่างลงในที่เก็บ. gitkeep จึงเป็นแฮ็ค

เพียงทำtouch /path/to/emptydirectory/.gitkeepเพื่อเพิ่มไฟล์และตอนนี้ Git จะสามารถรักษาไดเรกทอรีนี้ในที่เก็บได้


18
คุณสามารถมีได้มาก.gitignoreเท่าที่คุณต้องการหากคุณไม่ต้องการระบุพา ธ เต็มไปยังทุกโฟลเดอร์ทุกครั้ง
sjas

1
ฉันพยายามพูดถึงรายการไดเรกทอรีว่างลงใน.gitkeepไฟล์ แต่จะไม่ติดตามไดเรกทอรีว่างเปล่าเฉพาะโฟลเดอร์ติดตามที่.gitkeepมีไฟล์อยู่ ทำไมเป็นเช่นนั้น
Pardeep Jain

2
. gitkeep ไม่ทำงานเหมือน. gitignore ไม่ใช่รายชื่อของไดเรกทอรีที่จะต้องดูแล เป็นเพียงไฟล์ว่างที่อยู่ในไดเรกทอรีที่คุณต้องการเก็บไว้ มันสามารถตั้งชื่ออะไรก็ได้ที่คุณต้องการ .eep ฯลฯ ดังนั้นคุณสามารถมีไดเรกทอรีเช่น / foo / bar และไฟล์ gitkeep จะเป็น /foo/bar/.gitkeep
Jim Munro

@ sjas จะมีวิธีการหลายวิธีที่.gitignoreช่วยให้คุณประหยัดจากการระบุเส้นทางแบบเต็มไปยังทุกโฟลเดอร์ทุกครั้งหรือไม่ ฉันคิดว่าฉันขาดอะไรบางอย่างที่ชัดเจน
Willwsharp
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.