Git: Abaikan file yang dilacak


181

Saya memiliki beberapa file yang dilacak dalam repositori yang secara otomatis dimodifikasi ketika membangun kode. Saya tidak ingin melepaskan mereka, saya hanya tidak ingin mereka tampil sebagai dimodifikasi dan saya tidak ingin mereka dipentaskan ketika saya git menambahkan.

Apakah ini mungkin?



5
Jika file-file ini secara otomatis dihasilkan oleh build, maka mereka tidak boleh dilacak di git.
Codebling

Berikut adalah tutorial singkat tentang gitignore yang mungkin berguna bagi Anda: learningpassion.wordpress.com/2016/06/17/…
joker

Jawaban:


282

Tentu.

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

Untuk membatalkan dan mulai melacak lagi:

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

3
Apa yang terjadi pada file dalam kondisi ini ketika jika saya melakukan modifikasi padanya?
haymansfield

2
@haymansfield halaman bantuan untuk perintah mengatakan yang berikutGit will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Parham

3
Adakah cara untuk mengajukan --assume-unchangedkloning? Agar semua pengguna memiliki file, tetapi tidak melihat perubahan lokal untuk mereka di diffs.
Gauthier

10
@ Tyler - tidak, setelah file dilacak oleh git, itu akan selalu dilacak, bahkan jika file itu muncul di .gitignore. Kasing penggunaan saya adalah sesuatu seperti "di sini adalah templat dasar dari sebuah file tempat Anda menyimpan kredensial Anda, sekarang jangan pernah komit".
Jon V

5
@ watbywbarif Saya memiliki perintah yang git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))ditetapkan sebagai alias git. Setiap kali saya curiga itu adalah beberapa kejahatan ini, saya hanya melakukan itu.
Philippe Carphin

6

Pendekatan lain (dari jawaban yang sekarang dihapus oleh Seth Robertson, tetapi saya merasa terbantu dengan menghidupkannya kembali) adalah dengan mempertahankan file templat "yang dilacak", kemudian memiliki versi lokal yang tidak dilacak, misalnya: config.sample.ini "atau" config.ini.template "lihat https://gist.github.com/canton7/1423106 untuk contoh lengkap.

Maka tidak akan ada masalah jika file diubah dalam git, dll. Dan Anda dapat menggunakan .gitignore (akhirnya) pada file lokal yang tidak dilacak.


5

Solusi lain menggunakan atribut git dan% f dalam perintah filter:

git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude

16
Bisakah Anda memberikan rincian lebih lanjut tentang apa artinya ini dan apa yang dilakukannya secara kebetulan?
rogerdpack

ini menambahkan filter untuk file yang membaca konten dari file ".orig" yang memiliki teks asli
koct9i
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.