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?

haymansfield
sumber
7
kemungkinan duplikat git: dapatkah saya melakukan file dan mengabaikan perubahan konten?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
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> ...]
Nick Veys
sumber
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.

rogerdpack
sumber
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
koct9i
sumber
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