Saya memiliki folder application/
yang saya tambahkan ke .gitignore
. Di dalam application/
folder ada folder application/language/gr
. Bagaimana saya bisa memasukkan folder ini?
Saya sudah mencoba ini
application/
!application/language/gr/
tanpa keberuntungan ...
.gitignore
dokumentasi "format pola" menjadi lebih jelas (Desember 2013). Lihat jawaban saya di bawah iniJawaban:
Jika Anda mengecualikan
application/
, maka semua yang ada di bawahnya akan selalu dikecualikan (bahkan jika beberapa pola pengecualian negatif nanti ("unignore") mungkin cocok dengan sesuatu di bawahapplication/
).Untuk melakukan apa yang Anda inginkan, Anda harus "unignore" setiap direktori induk dari apa pun yang Anda ingin "unignore". Biasanya Anda akhirnya menulis aturan untuk situasi ini berpasangan: abaikan semua yang ada di direktori, tetapi tidak pada subdirektori tertentu.
Catatan
Trailingnya
/*
signifikan:dir/
mengecualikan direktori bernamadir
dan (secara implisit) semuanya di bawahnya.Dengan
dir/
, Git tidak akan pernah melihat apa pun di bawahdir
, dan dengan demikian tidak akan pernah menerapkan pola "tidak termasuk" apa pun di bawah inidir
.dir/*
tidak mengatakan apa-apa tentangdir
dirinya sendiri; itu hanya mengecualikan semua yang ada di bawahdir
. Dengandir/*
, Git akan memproses konten langsung daridir
, memberikan pola lain kesempatan untuk "membatalkan" sebagian dari konten (!dir/sub/
).sumber
/*
signifikan. Jika suatu direktori dikecualikan, Git tidak akan pernah melihat isi direktori itu. Poladir/
mengecualikan direktori bernamadir
dan (secara implisit) semuanya di bawahnya. Polanyadir/*
tidak mengatakan apa-apa tentangdir
dirinya sendiri; itu hanya mengecualikan semua yang ada di bawahdir
. Dengandir/
, Git tidak akan pernah melihat apa pun di bawahdir
, dan dengan demikian tidak akan pernah menerapkan pola "tidak termasuk" apa pun di bawah inidir
. Dengandir/*
, Git akan memproses konten langsung daridir
, memberikan pola lain kesempatan untuk "membatalkan" sebagian dari konten (!dir/sub/
).git add -f .
git status
, yang hanya akan memberi tahu Anda bahwa direktori tingkat atas akan ditambahkan. Sebagai gantinya, lakukangit add
direktori tingkat atas dan kemudiangit status
akan (mudah-mudahan) daftar subset file yang telah dicocokkan dengan pola.Komit 59856de dari Karsten Blees (kblees) untuk Git 1.9 / 2.0 (Q1 2014) mengklarifikasi kasus itu:
gitignore.txt
: memperjelas sifat rekursif dari direktori yang dikecualikanDalam kasus Anda:
Anda harus membuat daftar putih folder terlebih dahulu, sebelum dapat membuat daftar putih file dalam folder yang diberikan.
Pembaruan Februari / Maret 2016:
Perhatikan bahwa dengan git 2.9.x / 2.10 (pertengahan 2016?), Dimungkinkan untuk memasukkan kembali file jika direktori induk dari file tersebut dikecualikan jika tidak ada wildcard di jalur yang disertakan kembali .
Nguyễn Thái Ngọc Duy (
pclouds
) sedang mencoba untuk menambahkan fitur ini:Jadi dengan git 2.9+, ini bisa saja berhasil, tetapi pada akhirnya dikembalikan:
sumber
v2.8.1.windows.1
tetapi tampaknya tidak berhasil :(application/
+!application/language/gr/
yang disebutkan dalam jawaban berfungsi seperti yang diharapkan.Jawaban @Chris Johnsen bagus, tetapi dengan versi Git yang lebih baru (1.8.2 atau lebih baru), ada pola tanda bintang ganda yang dapat Anda manfaatkan untuk solusi yang lebih singkat:
Dengan cara ini Anda tidak perlu "membatalkan" direktori induk dari subfolder yang ingin Anda lacak.
Dengan Git 2.17.0 (Tidak yakin seberapa awal sebelum versi ini. Mungkin kembali ke 1.8.2), menggunakan
**
pola yang dikombinasikan dengan kecualikan untuk setiap subdirektori yang mengarah ke file Anda. Sebagai contoh:sumber
**
bisa cocok dengan nol subfolder, dan*
akan cocoklanguage
dan mengecualikannya, mencegah dimasukkannyagr
. Rantai penuh orang tua yang direkomendasikan oleh @Chris Johnson tampaknya masih perlu./www/**/* !/www/config.xml !/www/res
config.xml dan direktori res masih diabaikan.!/www/res/
. Anda dapat menggunakanfolder/**/*
pola, tetapi Anda masih perlu menambahkan kecualikan untuk setiap subdirektori yang ingin Anda tambahkan. Itu masih lebih pendek dan lebih mudah dibaca daripada kombo diabaikan / kecualikan.Ada banyak pertanyaan serupa tentang ini, jadi saya akan memposting apa yang saya tulis sebelumnya:
Satu-satunya cara saya mendapatkan ini untuk bekerja pada mesin saya adalah melakukannya dengan cara ini:
Perhatikan bagaimana Anda harus secara eksplisit mengizinkan konten untuk setiap level yang ingin Anda sertakan. Jadi jika saya memiliki subdirektori 5 tema yang jauh di bawah, saya masih perlu menjelaskannya.
Ini dari komentar @ Yarin di sini: https://stackoverflow.com/a/5250314/1696153
Ini adalah topik yang bermanfaat:
Saya juga mencoba
dan
**/wp-content/themes/**
atau
/wp-content/themes/**/*
Tidak ada yang berhasil untuk saya. Banyak trial and error!
sumber
!
aturan di bagian bawah.Saya hanya menemukan ini benar-benar berfungsi.
sumber
Cara paling sederhana dan mungkin terbaik adalah mencoba menambahkan file secara manual (umumnya ini lebih diutamakan daripada
.gitignore
aturan gaya):Anda bahkan mungkin ingin
-N
niat untuk menambahkan bendera, untuk menyarankan Anda akan menambahkannya, tetapi tidak segera. Saya sering melakukan ini untuk file baru saya belum siap untuk panggung.Ini salinan jawaban yang diposting pada QA duplikat yang bisa dengan mudah. Saya memposting ulang di sini untuk meningkatkan visibilitas — saya merasa lebih mudah untuk tidak memiliki kekacauan aturan gitignore.
sumber
Jadi, karena banyak programmer menggunakan node. kasus penggunaan yang memenuhi pertanyaan ini adalah untuk mengecualikan
node_modules
kecuali satu modulmodule-a
misalnya:sumber
2.10.2.windows.1
.Tambahkan jawaban tambahan:
ini hasilnya:
sumber
Khusus untuk versi Git yang lebih lama, sebagian besar saran tidak akan bekerja dengan baik. Jika itu masalahnya, saya akan meletakkan .gitignore terpisah di direktori di mana saya ingin konten untuk dimasukkan terlepas dari pengaturan lain dan memungkinkan di sana apa yang diperlukan.
Sebagai contoh: /.gitignore
/dependency_files/.gitignore
Jadi semua yang ada di / dependency_files (bahkan file .dll) disertakan dengan baik.
sumber
Saya telah menemukan kasus serupa di sini, di mana di laravel secara default,
.gitignore
mengabaikan semua menggunakan asterix, kemudian menimpa direktori publik.Ini tidak cukup jika Anda mengalami skenario OP.
Jika Anda ingin melakukan suatu subfolder tertentu
public
, mengatakan untuk misalnya dalam Andapublic/products
direktori Anda ingin menyertakan file yang satu subfolder dalam misalnya untuk memasukkanpublic/products/a/b.jpg
mereka wont dideteksi dengan benar, bahkan jika Anda menambahkan mereka secara khusus seperti ini!/public/products
,!public/products/*
, dll ..Solusinya adalah memastikan Anda menambahkan entri untuk setiap level jalur seperti ini untuk menimpa semuanya.
sumber
Contoh lain berjalan menyusuri struktur direktori untuk mendapatkan apa yang Anda inginkan. Catatan: Saya tidak mengecualikan
Library/
tetapiLibrary/**/*
> git add Library
> git status
sumber
Di WordPress, ini membantu saya:
sumber
gitignore - Menentukan file yang sengaja dilacak untuk diabaikan.
Contoh untuk mengecualikan semua kecuali foo / bar direktori tertentu (perhatikan / * - tanpa slash, wildcard juga akan mengecualikan semua dalam foo / bar ):
Contoh lain untuk WordPress :
Informasi lebih lanjut di sini: https://git-scm.com/docs/gitignore
sumber
Saya sering menggunakan solusi ini di CLI di mana alih-alih mengkonfigurasi saya
.gitignore
, saya membuat.include
file terpisah di mana saya mendefinisikan direktori (sub) yang ingin saya sertakan meskipun direktori secara langsung atau secara rekursif diabaikan oleh.gitignore
.Jadi, saya juga menggunakan
selama pementasan, sebelum melakukan.
Untuk OP, saya sarankan menggunakan
.include
yang memiliki baris berikut:CATATAN: Menggunakan
cat
tidak memungkinkan penggunaan alias (di dalam.include
) untuk menentukan $ HOME (atau direktori spesifik lainnya). Ini karena garishomedir/app1/*
ketika dilewatkan untukgit add
menggunakan perintah di atas muncul sebagaigit add 'homedir/app1/*'
, dan melampirkan karakter dalam tanda kutip tunggal ('') menjaga nilai literal setiap karakter dalam tanda kutip, sehingga mencegah alias (seperti homedir ) dari berfungsi (lihat Bash Tunggal Kutipan ).Berikut adalah contoh
.include
file yang saya gunakan di repo saya di sini .sumber
Saya ingin melacak file js produksi jquery dan ini berhasil:
sumber
konfigurasi JetBrains IntelliJ IDEA .gitignore saya, di mana saya perlu mengecualikan
.idea
folder apa saja kecuali.idea/runConfigurations
:lihat: https://github.com/daggerok/gitignore-idea-runConfigurations
sumber