Bagaimana cara mengabaikan file yang ada di repositori?

96

Saya memiliki file (config.php), yang sudah dikomit ke repositori Git, tetapi saya ingin mengabaikan secara lokal, yaitu saya ingin file itu tetap ada di repositori, tetapi memaksa Git untuk mengabaikan perubahan apa pun padanya.

Saya meletakkan file tersebut ke .gitignore, tetapi masih ditandai sebagai diubah dan Git masih mencoba untuk melakukan perubahan padanya, setiap kali saya melakukan sesuatu. Ada ide, apa yang saya lewatkan atau lakukan salah?

prcaen
sumber
harap tambahkan file .gitignore Anda - dengan begitu kami mungkin melihat masalah apa pun terkaitnya.
Lars
kemungkinan duplikat Bagaimana mengabaikan file yang sudah comit sebelumnya?
Karl Bielefeldt

Jawaban:

192

Jika file masih ditampilkan dalam status, meskipun dalam .gitignore, pastikan belum terlacak.

git rm --cached config.php

Jika Anda hanya ingin mengabaikannya secara lokal, Anda juga dapat membuatnya diabaikan oleh status git:

git update-index --assume-unchanged config.php
VonC
sumber
1
Ok terima kasih ! Jika saya menggabungkan cabang saya dengan yang lain, dapatkah file ini menimbulkan masalah?
prcaen
1
@ Nimbus147: ini seharusnya tidak menjadi masalah, dan setiap perubahan pada file itu masih akan diabaikan (yaitu tidak ditambahkan / dilakukan).
VonC
jika menggunakan SmartGit, Anda harus menggunakan hapus untuk melakukan ini.
Omid-RH
1
Apakah ada cara untuk memaksa update-index --assume-unchangeddi cabang jarak jauh? Saya ingin menyimpan file dalam repo, tetapi tidak dapat diubah oleh orang lain tetapi terlebih lagi tidak tersedia untuk tahap.
p014k
1
@ p014k Setahu saya tidak. Untuk jenis file seperti itu, saya menyimpannya dalam versi yang berbeda, kemudian menggunakan driver konten filer untuk secara otomatis menghasilkan file yang benar (pribadi) saat diperlukan. Filter itu tidak akan aktif di panggung misalnya. Lihat stackoverflow.com/a/54454356/6309 dan tautan terkaitnya.
VonC
6

Abaikan file yang sudah diperiksa:

git update-index --assume-unchanged file

Untuk kembali

git update-index --no-assume-unchanged file

Kembalikan Semua

git update-index --really-refresh 
shiva kumar
sumber
Bermanfaat. Kembalikan satu file berfungsi tetapi kembalikan semua tidak.
Adem Tepe
4

Jika file sudah ada di repositori, dan karenanya menjadi area Indeks / Staging, maka pembaruan ke .gitignore tidak akan mengubah situasi itu - Ini akan terus dilakukan.

Untuk menghapus file dari area Index / Staging digunakan git rm <file>.

Philip Oakley
sumber
Bagaimana jika file ada di repositori tetapi belum dipentaskan? Saya mencoba mengabaikan file * .log, tetapi saya masih melihatnya di bawah "Perubahan". Saya ingin mengabaikan semua, apa yang harus saya lakukan?
Sandra K
@ SandraK jika ada versi yang lebih lama dari file itu (jalur file / nama) sudah ada di repo pada komit terakhir, maka itu dianggap terlacak - 'indeks' akan memiliki file itu dalam catatannya, dan statusakan terus memberi tahu Anda tentang perubahan itu. Jika Anda ingin mengabaikan file * .log, untuk file yang sebelumnya ditempel dan yang saat ini tidak terlacak, Anda perlu keduanya git rm *.logdan memperbarui file .gitignore Anda. Periksa dulu apakah beberapa file log sebenarnya penting ... Sangat mudah untuk melupakan yang khusus itu ;-)
Philip Oakley
-3

Setelah file terdaftar di .gitignore, Anda tidak dapat mengubahnya.

Jadi Anda bisa menghapus file dari daftar dalam satu komit, komit perubahan berikutnya, lalu tambahkan kembali file ke daftar abaikan di komit ke-3 sesudahnya.

Yang biasanya saya lakukan adalah membagi file menjadi dua, satu yang diizinkan dan saya dapat mengubahnya, yang menyertakan file kedua jika ada, maka devs dapat membuat perubahan konfigurasi pada file yang diabaikan secara opsional.

erikvold
sumber
1
" Setelah file terdaftar di .gitignore Anda tidak dapat mengubahnya " - dapatkah Anda menjelaskan, apa maksud Anda? Saya memiliki banyak file di banyak file saya .gitignoredan saya terus-menerus mengubah file ini! Ini pertama kalinya, saya mendengar seseorang berkata, bahwa setelah saya menambahkan file ke .gitignore, saya tidak dapat mengubahnya.
trejder
1
Dia sebenarnya salah. Anda bisa mengubahnya. Git tidak mengunggahnya, atau bahkan memberi Anda opsi untuk mengunggahnya.
David