Saya mencoba memahami .gitignore
sintaks dengan lebih jelas , dan khususnya sejauh https://github.com/github/gitignore gitignores bersangkutan.
Saya melihat bahwa garis miring terdepan digunakan untuk mencocokkan hanya nama jalur yang relatif terhadap lokasi .gitignore
file (dari http://git-scm.com/docs/gitignore ):
Garis miring cocok dengan awal nama jalur. Misalnya, "/*.c" cocok dengan "cat-file.c" tetapi tidak dengan "mozilla-sha1 / sha1.c".
Tapi apa yang terjadi jika saya menghapus garis miring? Sejauh yang saya pahami, ada dua kasus:
- Jika pola tidak mengandung garis miring (atau hanya berisi garis miring, yang berarti harus cocok dengan direktori), pencarian dilakukan di dalam seluruh pohon direktori. Misalnya, pola
dir/
akan cocok<root>/dir
,<root>/a/dir
,<root>/a/b/c/.../dir
, dll, di mana<root>
adalah lokasi.gitignore
berkas. - Jika pola berisi garis miring, yang tidak berada di posisi belakang (bukan karakter terakhir), maka itu hanya cocok dengan nama jalur yang berhubungan dengan
.gitignore
lokasi file.
Ini adalah contoh yang saya buat untuk memeriksa perilaku ini:
# Directory structure:
<root>
├─ dir/
│ └─ test
├─ src/
│ ├─ dir/
│ │ └─ test
test file is there only because Git does not track empty directories.
Tes pertama:
# .gitignore
dir/
# git status
nothing to commit
Jadi Git mengabaikan kedua dir
direktori tersebut. Ini konsisten dengan kasus nomor 1: polanya tidak memiliki garis miring (kecuali yang di belakangnya), jadi Git mengawasi seluruh pohon direktori, mengabaikan semua yang cocok dengan pola tersebut.
Tes kedua:
# .gitignore
/dir/
# git status
Untracked files:
src/
Di sini, Git hanya mengabaikan dir
direktori yang berada tepat di bawah direktori root, berkat garis miring pada polanya.
Tes ketiga:
# .gitignore
dir/*
# git status
Untracked files:
src/
Ini konsisten dengan kasus nomor 2: pola memiliki beberapa garis miring di dalamnya, sehingga dianggap sebagai nama jalur yang dimulai dari direktori root.
Sekarang waktunya untuk pertanyaan sebenarnya. Mari kita pertimbangkan file gitignore ini : ketika mereka mengabaikan direktori downloader/
, misalnya, bukankah mereka sebenarnya mengabaikan setiap downloader
direktori yang ditemukan di seluruh pohon direktori? Inilah yang saya pikirkan sejak apa yang saya lihat tentang cara kerja Git sebelumnya.
Jadi jika saya kebetulan memiliki modul khusus dengan downloader
direktori di dalamnya, apakah itu akan diabaikan secara tiba-tiba serta yang biasa di root Magento? Ini sedikit pertanyaan rethorical karena sebenarnya sudah terjadi pada saya, menghasilkan bug yang sangat sulit ditemukan.
Jadi, di .gitignore
file Magento (yang saya maksud hanya sebagai contoh, btw) banyak pola yang mengandung garis miring, jadi pola tersebut dicocokkan dengan benar dengan nama jalur mulai dari root, tetapi ada beberapa kasus, seperti downloader/
atau errors/
itu , jika saya tidak salah, berpotensi berbahaya, dan yang mungkin harus diubah menjadi /downloader/
dan /errors/
.
Sebagai pertanyaan yang lebih umum, haruskah saya selalu menggunakan garis miring untuk pola yang tidak mengandung garis miring (kecuali untuk garis miring) ketika saya ingin memilih nama jalur yang secara eksplisit dimulai dari root, dan tidak menggunakannya untuk pola yang mengandung garis miring, atau haruskah saya selalu gunakan garis miring untuk kejelasan? Apa yang Anda pikirkan?
Terima kasih telah membaca dan maaf atas postingan yang panjang.
Jawaban:
Hanya ingin meringkas untuk kemungkinan referensi cepat di masa mendatang - garis miring terdepan menjangkar kecocokan ke akar. Jadi, pada contoh di bawah, tanpa garis miring, karakter pengganti juga akan mengecualikan semua yang ada di dalam foo karena akan mengambil
*
dan bergerak secara rekursif ke bawah pohon. Namun, dengan/*
, itu mengecualikan semuanya kecuali folder foo dan isinya:sumber
Anda telah menjawab pertanyaan Anda sendiri sepenuhnya. Jika Anda melihat repo github / gitignore lebih dekat, Anda akan melihat sebagian besar file menggunakan aturan yang tidak konsisten tentang bagaimana pola ditulis; kemungkinan besar sebagian besar disumbangkan oleh orang-orang yang tidak mau repot-repot membaca dokumentasi atau menguji berbagai hal seperti yang Anda lakukan.
Jadi, jika itu membantu: Anda benar, yakinlah.
Jika Anda melihat kesalahan dalam proyek kolaboratif seperti ini, jangan ragu untuk menyumbangkan pengetahuan Anda. Bahkan ada beberapa preseden jika Anda perlu membangun kepercayaan diri Anda lebih jauh.
sumber