Apa perbedaan antara .gitignore dan .gitkeep?

1927

Apa perbedaan antara .gitignoredan .gitkeep? Apakah keduanya sama dengan nama yang berbeda, atau apakah keduanya memiliki fungsi yang berbeda?

Saya sepertinya tidak dapat menemukan banyak dokumentasi .gitkeep.

Matty
sumber

Jawaban:

3441

.gitkeep tidak didokumentasikan, karena itu bukan fitur Git.

Git tidak dapat menambahkan direktori yang benar-benar kosong . Orang-orang yang ingin melacak direktori kosong di Git telah membuat konvensi untuk meletakkan file.gitkeep dalam direktori ini. File itu bisa disebut apa saja; Git tidak memberikan arti khusus pada nama ini.

Ada konvensi yang bersaing untuk menambahkan .gitignorefile ke direktori kosong untuk dilacak, tetapi beberapa orang melihat ini membingungkan karena tujuannya adalah menjaga direktori kosong, bukan mengabaikannya; .gitignorejuga digunakan untuk membuat daftar file yang harus diabaikan oleh Git ketika mencari file yang tidak dilacak.

Wooble
sumber
414
Bukankah itu solusi yang lebih baik untuk meletakkan READMEfile di subdirektori yang kosong yang berisi sedikit informasi tentang apa subdirektori yang akan digunakan? Tampaknya membingungkan memiliki file bernama .gitkeepyang sebenarnya bukan bagian dari git.
tamouse
423
@tamouse berkali-kali, jalur direktori kosong (mis. nama folder) cukup untuk menyatakan tujuannya (contoh: templat / cache, unggah / jempol, dll). Dalam kasus ini menempatkan readme ke masing-masing terasa berlebihan.
Halil Özgür
16
orang yang ingin melacak direktori kosong harus menunjukkan dalam README bahwa direktori harus dibuat atau membuat direktori menggunakan alat build mereka atau alat apa pun yang memerlukan direktori tersebut ada; /
32
@tamouse, @omouse: .gitignoreFile dengan dua baris: *dan !.gitignorelebih dari cukup kejelasan untuk menyampaikan apa yang sedang terjadi. Jika diperlukan elaborasi lebih lanjut, tambahkan komentar ke bagian atas file menggunakan # sintaks.
Droogan
63
Patut diperhatikan bahwa framework Rails yang populer telah sedikit mengubah konvensi ini menggunakan .keepfile alih-alih .gitkeepmelestarikan folder kosong ini, karena git bukan satu-satunya sistem kontrol sumber yang tidak melacak folder kosong. Lebih detail di sini: github.com/rails/rails/issues/2800
Claudio Floreani
330

.gitkeephanyalah pengganti. File dummy, jadi Git tidak akan melupakan direktori, karena Git hanya melacak file.


Jika Anda ingin direktori kosong dan memastikannya tetap 'bersih' untuk Git, buatlah yang .gitignoreberisi baris-baris berikut di dalam:

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

# Ignore all files in this dir...
*

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

Jika Anda ingin agar hanya satu jenis file yang dapat dilihat oleh Git, berikut adalah contoh cara memfilter semuanya, kecuali .gitignore dan semua .txtfile:

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

# Filter everything...
*

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

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

('#' menunjukkan komentar.)

sja
sumber
3
Saya suka latihan ini sendiri. Jika ada kode sumber di direktori ini tidak akan ada kebutuhan untuk .gitkeep dan umum itu konten temp / cache / pengguna yang selama pengujian akan dihasilkan lagian menyebabkan Anda harus juga Gitignore file-file
chrisan
1
Mengapa Anda perlu !di depan .gitignore? Apakah itu untuk menghindari titik?
Will
7
@ Akan - Tidak, !meniadakan bagian berikut, seperti biasanya dalam pemrograman.
sjas
3
Tidak perlu memasukkan !.gitignorefile abaikan, git tambahkan file kemudian edit, atau paksakan tambahkan dengan konten yang sesuai ("*" untuk mengabaikan semuanya, atau tidak ada yang memastikan folder itu ada) contoh lebih lanjut .
AD7six
13
Dari tautan Anda: Since the git ignore file is already in the repo it is not necessary to not-ignore it - it is already tracked.------ Jika tidak, dan Anda tidak melakukan penambahan paksa, Anda mungkin melupakannya. Dalam kasus sepele, tidak ada masalah, tetapi jika itu adalah file yang lebih besar Anda mungkin kesal. Menggunakan !.gitignoremencegah Anda dari menembak diri sendiri di kaki Anda. Saya lebih suka, setelah membakar diri di masa lalu.
sjas
125
.gitignore

adalah file teks yang terdiri dari daftar file dalam direktori Anda yang git akan abaikan atau tidak tambahkan / perbarui dalam repositori.

.gitkeep

Karena Git menghapus atau tidak menambahkan direktori kosong ke repositori, .gitkeep adalah semacam peretasan (saya tidak berpikir itu secara resmi dinamai sebagai bagian dari Git) untuk menyimpan direktori kosong dalam repositori.

Lakukan saja touch /path/to/emptydirectory/.gitkeepuntuk menambahkan file, dan Git sekarang akan dapat mempertahankan direktori ini di repositori.

Jim Munro
sumber
18
Anda dapat memiliki sebanyak yang .gitignoreAnda inginkan, jika Anda tidak ingin menentukan path lengkap ke setiap folder setiap waktu.
sjas
1
Saya mencoba menyebutkan daftar direktori kosong ke dalam .gitkeepfile tetapi tidak akan melacak direktori kosong, Hanya folder yang melacak .gitkeepkeberadaan file. kenapa begitu ?
Pardeep Jain
2
.gitkeep tidak berfungsi seperti .gitignore. Ini bukan daftar direktori untuk disimpan. Ini hanyalah file kosong yang tinggal di direktori yang ingin Anda simpan. Ini dapat dinamai apa saja yang Anda inginkan .keep, dll. Jadi Anda dapat memiliki direktori seperti / foo / bar dan file gitkeep akan menjadi /foo/bar/.gitkeep
Jim Munro
@sjas bagaimana memiliki beberapa .gitignores menyelamatkan Anda dari menentukan path lengkap ke setiap folder setiap waktu? Saya pikir saya kehilangan sesuatu yang jelas.
Willwsharp