Pertanyaan Bagaimana cara mengkonfigurasi git untuk mengabaikan beberapa file secara lokal?


Dapatkah saya mengabaikan file secara lokal tanpa mencemari konfigurasi git global untuk orang lain? Saya memiliki file yang tidak terlacak yang merupakan spam dalam status git saya tetapi saya tidak ingin melakukan perubahan git config untuk setiap file acak tunggal yang tidak terlacak yang saya miliki di cabang lokal saya.


952
2017-11-18 01:36


asal


Jawaban:


Dari dokumentasi Git yang relevan:

Pola yang khusus untuk repositori tertentu tetapi tidak perlu dibagi dengan repositori terkait lainnya (misalnya, file tambahan yang hidup di dalam repositori tetapi khusus untuk alur kerja satu pengguna) harus masuk ke $GIT_DIR/info/exclude mengajukan.

Itu .git/info/exclude file memiliki format yang sama dengan apa pun .gitignore mengajukan. Pilihan lain adalah mengatur core.excludesFile untuk nama file yang berisi pola global.

Perhatikan, jika Anda sudah memiliki perubahan yang tidak berubah, Anda harus menjalankan yang berikut setelah mengedit pola abaikan Anda:

git update-index --assume-unchanged [<file>...]

Perhatikan $GIT_DIR: Ini adalah notasi yang digunakan seluruh manual git hanya untuk menunjukkan path ke repositori git. Jika variabel lingkungan diatur, maka akan menggantikan lokasi repo mana Anda berada, yang mungkin bukan yang Anda inginkan.


1298
2017-11-18 01:38



Memperbarui: Pertimbangkan untuk menggunakan git update-index --skip-worktree [<file>...] sebagai gantinya, terima kasih @danShumway! Lihat Penjelasan Borealid tentang perbedaan dari dua opsi.


Jawaban lama:

Jika Anda perlu mengabaikan perubahan lokal ke file yang dilacak (kami memilikinya dengan modifikasi lokal untuk file konfigurasi), gunakan git update-index --assume-unchanged [<file>...].


374
2018-01-22 15:39



Tambahkan baris berikut ke bagian [alias] dari file .gitconfig Anda

ignore = update-index --assume-unchanged
unignore = update-index --no-assume-unchanged
ignored = !git ls-files -v | grep "^[[:lower:]]"

Sekarang Anda bisa menggunakannya git ignore my_file untuk mengabaikan perubahan pada file lokal, dan git unignore my_file untuk berhenti mengabaikan perubahan. git ignored daftar file yang diabaikan.

Jawaban ini diperoleh dari http://gitready.com/intermediate/2009/02/18/temporarily-ignoring-files.html.


128
2017-08-19 15:21



Anda memiliki beberapa opsi:

  • Tinggalkan yang kotor (atau tidak terikat) .gitignore file di dir Anda bekerja (atau menerapkannya secara otomatis menggunakan topgit atau alat patch semacam itu).
  • Masukkan pengecualian di Anda $GIT_DIR/info/exclude file, jika ini khusus untuk satu pohon.
  • Menjalankan git config --global core.excludesfile ~/.gitignore dan tambahkan pola ke Anda ~/.gitignore. Opsi ini berlaku jika Anda ingin mengabaikan pola tertentu semua pepohonan. Saya menggunakan ini untuk .pyc dan .pyo file, misalnya.

Juga, pastikan Anda menggunakan pola dan tidak secara eksplisit menyebutkan file, bila berlaku.


89
2017-11-18 01:45



Saya pikir Anda mencari:

git update-index --skip-worktree FILENAME

yang mengabaikan perubahan yang dibuat lokal

Ini http://devblog.avdi.org/2011/05/20/keep-local-modifications-in-git-tracked-files/ penjelasan lebih lanjut tentang solusi ini!


39
2017-07-11 06:38



Anda dapat menginstal beberapa git alias untuk membuat proses ini lebih sederhana. Ini mengedit [alias] simpul dari Anda .gitconfig mengajukan.

git config --global alias.ignore 'update-index --skip-worktree'
git config --global alias.unignore 'update-index --no-skip-worktree'
git config --global alias.ignored '!git ls-files -v | grep "^S"'

Pintasan yang dipasang untuk Anda adalah sebagai berikut:

  • git ignore config.xml
    • git akan berpura-pura tidak melihat perubahan apa pun config.xml - mencegah Anda dari tidak sengaja melakukan perubahan tersebut.
  • git unignore config.xml
    • git akan melanjutkan mengakui perubahan Anda config.xml - memungkinkan Anda untuk melakukan perubahan itu lagi.
  • git ignored
    • git akan mencantumkan semua file yang Anda "abaikan" dengan cara yang dijelaskan di atas.

Saya membangun ini dengan mengacu pada Jawaban phatmann - yang menyajikan sebuah --assume-unchanged versi yang sama.

Versi yang saya gunakan menggunakan --skip-worktree untuk mengabaikan perubahan lokal. Lihat Jawaban Borealid untuk penjelasan lengkap tentang perbedaannya, tetapi pada dasarnya --skip-worktreeTujuannya adalah bagi pengembang untuk mengubah file tanpa risiko melakukan perubahan mereka.

Itu git ignored perintah yang disajikan di sini menggunakan git ls-files -v, dan filter daftar untuk hanya menampilkan entri yang diawali dengan S menandai. Itu S tag menunjukkan file yang statusnya "melewati worktree". Untuk daftar lengkap status file yang ditunjukkan oleh git ls-files: lihat dokumentasi untuk -t opsi aktif git ls-files.


30
2017-08-22 18:27



Anda cukup menambahkan file .gitignore ke direktori home Anda, yaitu $HOME/.gitignore atau ~/.gitignore. Kemudian beri tahu git untuk menggunakan file itu dengan perintah:

git config --global core.excludesfile ~/.gitignore

Ini adalah file gitignore normal yang referensi git ketika memutuskan apa yang harus diabaikan. Karena ini ada di direktori home Anda, itu hanya berlaku untuk Anda dan tidak mengotori file proyek .gitignore apa pun.

Saya telah menggunakan pendekatan ini selama bertahun-tahun dengan hasil yang luar biasa.


22
2017-10-14 12:58