.gitignore mengecualikan file dalam direktori tetapi tidak pada direktori tertentu

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

Ini sepertinya tidak berhasil. Ketika saya mengkloning proyek, tidak ada "application/cache"folder atau "application/cache/folder"folder, dll ...

Saya ingin jika file dalam folder cache tidak di-cache tetapi foldernya, sehingga izin folder ditransfer dan ada.

Matthew
sumber

Jawaban:

220

Git tidak melacak folder, hanya file, jadi jika Anda mengabaikan semua yang ada di folder, Git tidak akan memiliki apapun untuk dilacak. Anda dapat menambahkan .gitignorefile setiap direktori ( application/cache, application/cache/folder, application/cache/folder/onemorefolder/) dengan isi sebagai berikut:

*
!.gitignore

Kemudian, Anda dapat menambahkan direktori tersebut, dan hanya .gitignorefile di setiap direktori yang akan ditambahkan - tetapi ini berarti direktori sekarang akan dilacak (yaitu, dibuat saat kloning).

mipadi
sumber
7
File .gitignore yang digunakan untuk tujuan ini boleh kosong.
kevpie
2
Mereka bisa kosong, jika folder diabaikan oleh .gitignorefile atas . Dalam hal ini, itulah jawaban saya.
KingCrunch
4
lebih masuk akal dan lebih sederhana adalah dengan menggunakan file bernama .gitkeep, maka Anda tidak perlu menempatkan apa pun di file .gitignore.
Landak
3
@kevpie Ada file lain di dalam folder dan dia tidak ingin file itu dilacak. Jika file .gitignore kosong, file tersebut tampaknya akan dilacak.
maliaya
dengan tujuan yang sama, saya gunakan .gitkeepsebagai pengganti .gitignore. itu lebih masuk akal bagi saya
Éderson T. Szlachta
22

Git tidak melacak direktori kosong. Cukup tambahkan beberapa file placeholder kosong di folder yang ingin Anda komit.

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

Lakukan ini juga dengan setiap folder "kosong". Nanti Anda dapat mengabaikan file-file ini, mereka benar-benar hanya ada untuk memastikan bahwa git membuat direktori tersebut pada kloning. Entri dalam .gitignoremenyimpan file lain di dalam folder agar tidak dilacak (kecuali Anda memaksanya dengan git add -f;)).

KingCrunch
sumber
16

Ada cara lain yang mungkin lebih bersih untuk melakukan ini. Daripada memiliki file sub .gitignore di folder yang ingin Anda simpan. Anda dapat meletakkan ini di root .gitignore sebagai berikut:

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

Sekarang cukup buat dan komit file .gitkeep kosong ke direktori seperti yang tercantum di atas. Folder kemudian akan dilacak dengan file .gitkeep itu tetapi tidak ada konten yang akan dilacak.

Joel Duckworth
sumber
2
atau hanya !*.gitkeep:)
Éderson T. Szlachta
Pertanyaannya adalah bagaimana cara mengabaikan isi folder tetapi menyimpan folder itu sendiri. Jadi saya yakin jawaban saya tetap berlaku dan hanya memiliki! *. Gitkeep tidak akan mengabaikan konten folder.
Joel Duckworth
3

Anda dapat meletakkan file .gitignore di masing-masing (seperti kata mipadi) atau membuat sesuatu seperti itu di file root .gitingnore Anda

/assets/*/
/assets/*.*

itu bekerja dengan baik untuk saya

Claude Janz
sumber
Ini berfungsi, tetapi hanya jika repo menggunakan ekstensi file. Sesuatu seperti root/LICENSE-FILEtidak akan dikecualikan.
Brett Zamir
2

Visual Studio tidak menyukai jawaban yang diterima. Saya harus menambahkan baris baru sebelum * untuk membuatnya berfungsi.

# Ignore all files in this folder.
*
!.gitignore
Stephen
sumber