Pertanyaan Bagaimana cara menghentikan pelacakan dan mengabaikan perubahan pada file di Git?


Saya telah mengkloning proyek yang mencakup beberapa .csproj file. Saya tidak perlu / suka lokal saya csproj file yang dilacak oleh Git (atau dibesarkan saat membuat patch), tetapi jelas mereka dibutuhkan dalam proyek.

saya telah menambahkan *.csproj ke LOKAL saya .gitignore, tetapi file sudah di repo.

Ketika saya mengetik status git, itu menunjukkan perubahan saya csproj yang saya tidak tertarik untuk melacak atau mengirimkan untuk tambalan.

Bagaimana cara menghapus "pelacakan" file-file ini dari repo pribadi saya (tetapi menyimpannya di sumber agar saya bisa menggunakannya) sehingga saya tidak melihat perubahan ketika saya melakukan status (atau membuat patch)?

Apakah ada cara yang benar / kanonis untuk menangani situasi ini?


1429
2018-06-01 19:08


asal


Jawaban:


Hanya menelepon git rm --cached pada masing-masing file yang ingin Anda hapus dari kontrol revisi seharusnya baik-baik saja. Selama pola abaikan lokal Anda benar, Anda tidak akan melihat file-file ini termasuk dalam keluaran status git.

Perhatikan bahwa solusi ini menghapus file dari repositori, sehingga semua pengembang perlu mempertahankan salinan lokal mereka (non-revisi terkontrol) dari file

Untuk mencegah git mendeteksi perubahan dalam file-file ini Anda juga harus menggunakan perintah ini:

git update-index --assume-unchanged [path]

Apa yang mungkin ingin Anda lakukan: (dari bawah Jawaban @Ryan Taylor)

  1. Ini untuk memberi tahu Anda ingin versi file atau folder independen Anda sendiri. Misalnya, Anda tidak ingin menimpa (atau menghapus)   file konfigurasi produksi / pementasan.

git update-index --skip-worktree <path-name>

Jawaban lengkapnya ada di sini di URL ini: http://source.kohlerville.com/2009/02/untrack-files-in-git/


1795
2018-06-01 19:16



Jika kamu melakukan git update-index --assume-unchanged file.csproj, git tidak akan memeriksa file.csproj untuk perubahan secara otomatis: yang akan menghentikannya muncul dalam status git setiap kali Anda mengubahnya. Jadi Anda bisa menandai semua file .csproj Anda dengan cara ini - meskipun Anda harus menandai secara manual setiap yang baru yang dikirimkan repo hulu kepada Anda. (Jika Anda memilikinya di Anda .gitignore atau .git/info/exclude, yang Anda buat akan diabaikan)

Saya tidak sepenuhnya yakin apa file .csproj adalah ... jika mereka sesuatu di sepanjang baris konfigurasi IDE (mirip dengan file Eclipse. Gerhana dan .classpath) maka saya akan menyarankan mereka seharusnya tidak pernah dikendalikan sumber di semua. Di sisi lain, jika mereka bagian dari sistem build (seperti Makefiles) maka jelas mereka harus --- dan cara untuk mengambil perubahan lokal opsional (misalnya dari local.csproj a la config.mk) akan berguna : membagi membangun menjadi bagian global dan menimpa lokal.


223
2018-06-01 19:24



Ini adalah proses dua langkah:

  1. Hapus pelacakan file / folder - tetapi simpan pada disk - menggunakan

    git rm --cached 
    

    Sekarang mereka tidak muncul sebagai "berubah" tetapi tetap ditampilkan sebagai

        untracked files in  git status -u  
    
  2. Tambahkan mereka ke .gitignore


135
2017-08-02 14:25



Ada 3 opsi, Anda mungkin ingin # 3

1 Ini akan menyimpan file lokal untuk Anda, tetapi akan menghapusnya untuk orang lain ketika mereka menarik.

git rm --cached <file-name> atau git rm -r --cached <folder-name>

2 Ini untuk pengoptimalan, seperti folder dengan banyak file, mis. SDK yang mungkin tidak akan pernah berubah. Ini memberitahu git untuk berhenti memeriksa folder besar itu setiap kali ada perubahan, karena tidak akan ada.

git update-index --assume-unchanged <path-name>

3 Ini untuk memberi tahu Anda ingin versi file atau folder independen Anda sendiri. Misalnya, Anda tidak ingin menimpa (atau menghapus) file konfigurasi produksi / pementasan.

git update-index --skip-worktree <path-name>

Sangat penting untuk mengetahui hal itu git update-index  tidak akan menyebar dengan git, dan setiap pengguna harus menjalankannya secara mandiri.


108
2017-10-26 21:18



Jawaban yang diterima masih tidak berhasil untuk saya

Saya menggunakan

git rm -r --cached.

git add.

git commit -m "memperbaiki .gitignore"

Temukan jawabannya dari sini 


78
2017-09-18 05:44



Lupa gitignore Anda?

Jika Anda memiliki seluruh proyek secara lokal tetapi lupa untuk menambahkan Anda git ignore dan sekarang melacak beberapa file yang tidak perlu menggunakan perintah ini untuk menghapus semuanya

git rm --cached -r .

pastikan Anda berada di akar proyek.

Maka Anda bisa melakukan hal yang biasa

Menambahkan

git add .

Melakukan

git commit -m 'removed all and added with git ignore'

Dorong

git push origin master

Kesimpulan

Semoga ini membantu orang-orang yang harus membuat perubahan pada mereka .gitignore atau lupa semuanya bersama.

  • Ini menghapus seluruh cache
  • Lihatlah gitignore Anda
  • Menambahkan file yang ingin Anda lacak
  • Dorong ke repo Anda

37
2017-11-04 10:25



Untuk menghemat waktu, aturan yang Anda tambahkan ke gitignore Anda dapat digunakan untuk menghapus banyak file / folder, yaitu

git rm --cached app/**/*.xml

atau

git rm --cached -r app/widgets/yourfolder/

e.t.c.


20
2017-11-07 13:18



Seperti yang ditunjukkan dalam jawaban lain, jawaban yang dipilih salah.

Itu menjawab untuk pertanyaan lain menunjukkan bahwa itu mungkin lompatan-pekerjaan yang akan diperlukan.

git update-index --skip-worktree <file>

20
2018-05-12 11:33



Untuk mencegah pemantauan file oleh git

git update-index --assume-unchanged [file-path]

Dan untuk mengembalikannya kembali digunakan

git update-index --no-assume-unchanged [file-path]

3
2018-04-18 09:41



Banyak orang menyarankan Anda untuk menggunakannya git update-index --assume-unchanged. Memang, ini mungkin solusi yang baik, tetapi hanya dalam jangka pendek.

Apa yang mungkin ingin Anda lakukan adalah ini: git update-index --skip-worktree.

(Opsi ketiga, yang mungkin tidak Anda inginkan adalah: git rm --cached. Ini akan menyimpan file lokal Anda, tetapi akan ditandai sebagai dihapus dari repositori jarak jauh.)

Perbedaan antara dua opsi pertama?

  • assume-unchanged adalah untuk sementara memungkinkan Anda menyembunyikan modifikasi dari file. Jika Anda ingin menyembunyikan modifikasi yang dilakukan pada file, modifikasi file, lalu keluar dari cabang lain, Anda harus menggunakannya no-assume-unchanged maka mungkin modifikasi simpanan dilakukan.
  • skip-worktree akan mengikuti Anda apa pun cabang yang Anda bayar, dengan modifikasi Anda!

Gunakan huruf assume-unchanged

Ini mengasumsikan file ini tidak boleh dimodifikasi, dan memberi Anda output yang lebih bersih saat melakukannya git status. Tetapi ketika memeriksa ke cabang lain, Anda perlu mengatur ulang bendera dan melakukan atau menyembunyikan perubahan sebelum jadi. Jika Anda menarik dengan opsi ini diaktifkan, Anda harus menyelesaikan konflik dan git tidak akan otomatis bergabung. Itu sebenarnya hanya menyembunyikan modifikasi (git status tidak akan menampilkan file yang ditandai).

Saya suka menggunakannya ketika saya hanya ingin berhenti melacak perubahan untuk sementara waktu + melakukan banyak file (git commit -a) terkait dengan sama modifikasi.

Gunakan huruf skip-worktree

Anda memiliki kelas penyetelan yang berisi parameter (mis. Termasuk kata sandi) yang harus diubah teman-teman Anda sesuai dengan pengaturannya.

  • 1: Buat versi pertama kelas ini, isi kolom yang dapat Anda isi dan biarkan yang lain kosong / null.
  • 2: Komit dan dorong ke server jauh.
  • 3: git update-index --skip-worktree MySetupClass.java
  • 4: Perbarui kelas konfigurasi Anda dengan parameter Anda sendiri.
  • 5: Kembali bekerja pada fungsi lain.

Modifikasi yang Anda lakukan akan mengikuti Anda apa pun cabangnya. Peringatan: jika teman Anda juga ingin memodifikasi kelas ini, mereka harus memiliki pengaturan yang sama, jika tidak modifikasi mereka akan didorong ke repositori jarak jauh. Ketika menarik, versi remote file harus menimpa milik Anda.

PS: lakukan satu atau yang lain, tetapi tidak keduanya karena Anda akan memiliki efek samping yang tidak diinginkan. Jika Anda ingin mencoba bendera lain, Anda harus menonaktifkan yang terakhir terlebih dahulu.


3
2018-02-20 10:02



Untuk memberi tahu Git agar tidak melacak perubahan ke file / folder lokal Anda (yang berarti status git tidak akan mendeteksi perubahannya), lakukan:

git update-index --skip-worktree path/to/file

Dan untuk memberi tahu Git untuk melacak perubahan ke versi lokal Anda sekali lagi (sehingga Anda dapat melakukan perubahan), lakukan:

git update-index --no-skip-worktree path/to/file

1
2018-06-12 22:10