Kapan Anda akan menggunakan .git / info / exclude daripada .gitignore untuk mengecualikan file?

156

Saya agak bingung tentang pro dan kontra menggunakan .git/info/excludedan .gitignoremengecualikan file.

Keduanya berada pada level repositori / proyek, lalu bagaimana perbedaannya dan kapan harus digunakan .git/info/exclude?

Parag
sumber

Jawaban:

215

Keuntungannya .gitignoreadalah dapat diperiksa ke dalam repositori itu sendiri, tidak seperti .git/info/exclude. Keuntungan lainnya adalah Anda dapat memiliki banyak .gitignorefile, satu di dalam setiap direktori / subdirektori untuk aturan pengabaian khusus direktori, tidak seperti .git/info/exclude.

Jadi, .gitignoretersedia di semua klon repositori. Oleh karena itu, dalam tim besar semua orang mengabaikan yang sama file Contoh *.db, *.log. Dan Anda dapat memiliki aturan pengabaian yang lebih spesifik karena beberapa .gitignore.

.git/info/excludehanya tersedia untuk klon individu, sehingga apa yang diabaikan oleh satu orang dalam klonnya tidak tersedia di klon orang lain. Misalnya, jika seseorang menggunakan Eclipseuntuk pengembangan, mungkin masuk akal bagi pengembang tersebut untuk menambahkan .buildfolder ke .git/info/excludekarena pengembang lain mungkin tidak menggunakan Eclipse.

Secara umum, file / abaikan aturan yang harus diabaikan secara universal harus masuk .gitignore, dan jika tidak file yang ingin Anda abaikan hanya pada klon lokal Anda harus masuk ke.git/info/exclude

mu 無
sumber
tapi itu idealnya masuk ke ~ / .gitignore sesuai dokumentasi resmi Git di sini, git-scm.com/docs/gitignore
Devendra Swami
@DevendraSwami Saya tidak mengerti entri spesifik mana yang harus dimasukkan ~/.gitignoredalam komentar Anda di atas. Pemahaman saya adalah bahwa abaikan aturan dapat berada di 3 level - $PROJECT/.git/info/excludeuntuk aturan abaikan khusus (proyek, pengguna), $PROJECT/<any number of directories>/.gitignoreyang untuk aturan abaikan khusus proyek di semua pengguna di mana pun (saat check in), ~/.gitignore untuk aturan abaikan khusus pengguna untuk proyek apa pun untuk pengguna itu di mesin itu. Berdasarkan tujuannya, Anda memilih tempat untuk memasukkan entri.
mu 無
ya, Anda benar sekali. Komentar saya terkait dengan pertanyaan ini stackoverflow.com/questions/59673991/…
Devendra Swami
Saya minta maaf atas komentar asli yang tidak lengkap.
Devendra Swami
2
@ShimmyWeitzhandler, Apakah file sln sudah ada di repo Anda? Lalu kecualikan atau .ignore tidak akan mencegah git melacak perubahannya. Cobalah salah satu dari yang berikut: git rm --cached <path-name>akan menghapusnya dari repositori, tetapi menyimpannya secara lokal. git update-index --skip-worktree <path-name>akan mengabaikan perubahan pada file, tetapi menyimpannya dalam repositori. Karena penasaran: Mengapa Anda ingin file sln dikecualikan? Ini adalah bagian penting dari solusi .Net, bukan?
Koen
43

Di Google: 3 cara mengecualikan file

  1. .gitignore berlaku untuk setiap klon dari repositori ini (berversi, semua orang akan memilikinya),
  2. .git/info/exclude hanya berlaku untuk salinan lokal Anda dari repositori ini (lokal, tidak dibagikan dengan orang lain),
  3. ~/.gitignore berlaku untuk semua repositori di komputer Anda (lokal, tidak dibagikan dengan orang lain).

3. sebenarnya perlu menyetel konfigurasi di komputer Anda:

git config --global core.excludesfile '~/.gitignore'
LeGEC
sumber
2
Ya, saya membacanya juga, tetapi ingin mendapatkan perspektif yang lebih praktis (dunia nyata) :-)
Parag
Blog yang ditautkan secara keliru memanggil file .git/info/excludes, padahal seharusnya .git/info/exclude, seperti yang dikonfirmasi oleh dokumentasi yang ditautkannya .
mwfearnley
13
(spoiler: cara ketiga adalah mengabaikan komputer-global melalui pengaturan di ~ / .gitconfig)
hmijail berduka atas pengunduran diri
@hmijail: terima kasih, saya menyertakan komentar Anda dalam jawaban ini
LeGEC
14

Hanya untuk menawarkan pengalaman (dunia nyata) kami: kami mulai menggunakan .git / info / exclude ketika kami harus menyesuaikan beberapa file konfigurasi di setiap lingkungan pengembangan tetapi masih ingin sumbernya dipertahankan dalam repo dan tersedia untuk pengembang lain.

Dengan cara ini, file lokal, setelah dikloning dan dimodifikasi dapat dikeluarkan dari komit tanpa mempengaruhi file asli di repo tetapi juga tanpa harus diabaikan di repo.

Effing
sumber
5

Gunakan .gitignoreuntuk mengabaikan aturan yang khusus untuk proyek . Gunakan excludeatau file abaikan global untuk mengabaikan aturan yang khusus untuk lingkungan Anda .

Misalnya, file abaikan global saya mengabaikan file temp yang dibuat oleh editor apa pun yang saya gunakan — aturan itu khusus untuk lingkungan saya, dan mungkin berbeda untuk beberapa pengembang lain di proyek yang sama (mungkin mereka menggunakan editor yang berbeda). OTOH, .gitignorefile proyek saya mengabaikan hal-hal seperti kunci API dan artefak build — itu untuk proyek , dan harus sama untuk semua orang di proyek.

Apakah itu membantu?

Marnen Laibow-Koser
sumber
1
Terima kasih ini sangat membantu.
Adam Hughes