Cara Anda Git mengabaikan menonton / melacak dir / file tertentu. Anda baru saja menjalankan ini:
git update-index --assume-unchanged <file>
Sekarang bagaimana Anda membatalkannya sehingga mereka ditonton lagi? (Sebut saja un-menganggap.)
Cara Anda Git mengabaikan menonton / melacak dir / file tertentu. Anda baru saja menjalankan ini:
git update-index --assume-unchanged <file>
Sekarang bagaimana Anda membatalkannya sehingga mereka ditonton lagi? (Sebut saja un-menganggap.)
Jawaban:
Untuk mendapatkan undo / tampilkan dir's / file yang diatur untuk menganggap-tidak berubah jalankan ini :
git update-index --no-assume-unchanged <file>
Untuk mendapatkan daftar dir / file yang assume-unchanged
dijalankan ini :
git ls-files -v|grep '^h'
git ls-files -v|grep '^h'|cut -c3-
, yang akan memberi Anda hanya nama file, tanpa awalan "h".
assume-unchanged
miliki, gunakan saja git update-index --really-refresh
. Dengan perintah itu, Anda tidak perlu mencari file dengan git ls-files
terlebih dahulu.
Jika ini adalah perintah yang sering Anda gunakan - Anda mungkin ingin mempertimbangkan untuk memiliki alias juga. Tambahkan ke global Anda .gitconfig
:
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
Cara mengatur alias (jika Anda belum tahu):
git config --configLocation alias.aliasName 'command --options'
Contoh:
git config --global alias.hide 'update-index --assume-unchanged'
git config... etc
Setelah menyimpan ini untuk Anda .gitconfig
, Anda dapat menjalankan perintah pembersih.
git hide myfile.ext
atau
git unhide myfile.ext
Ini dokumentasi git sangat membantu.
Sesuai komentar, ini juga alias bermanfaat untuk mencari tahu file apa yang saat ini disembunyikan:
[alias]
hidden = ! git ls-files -v | grep '^h' | cut -c3-
hidden = ! git ls-files -v | grep '^h' | cut -c3-
fungsi indeks pembaruan git memiliki beberapa opsi yang dapat Anda temukan mengetik seperti di bawah ini:
git update-index --help
Di sini Anda akan menemukan berbagai opsi - cara menangani dengan fungsi pembaruan-indeks.
[jika Anda tidak tahu nama file]
git update-index --really-refresh
[jika Anda tahu nama file]
git update-index --no-assume-unchanged <file>
akan mengembalikan semua file yang telah ditambahkan dalam daftar abaikan.
git update-index --assume-unchanged <file>
git update-index --no-assume-unchanged <file>
menyelamatkan hidup saya .. ok, saya hanya bisa menyinkronkan folder lagi, tapi saya memang menginginkan solusi "nyata" untuk masalah ini.
Untuk mensintesis jawaban asli yang sangat baik dari @adardesign, @adswebwork dan @AnkitVishwakarma, dan komentar dari @Bdoserror, @Retsam, @seanf, dan @torek, dengan tautan dokumentasi tambahan dan alias ringkas ...
Perintah Dasar
Untuk mengatur ulang file yang dianggap-tidak berubah kembali menjadi normal:
git update-index --no-assume-unchanged <file>
Untuk membuat daftar semua file yang dianggap tidak berubah:
git ls-files -v | grep '^[a-z]' | cut -c3-
Untuk mengatur ulang semua file yang diasumsikan tidak berubah kembali menjadi normal:
git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
Catatan: Perintah ini yang telah didaftar di tempat lain tampaknya tidak mengatur ulang semua file berasumsi tidak berubah lagi (saya percaya itu digunakan untuk dan sebelumnya terdaftar sebagai solusi):
git update-index --really-refresh
Pintasan
Untuk membuat tugas-tugas umum mudah untuk mengeksekusi di git, menambahkan / memperbarui berikut alias bagian untuk .gitconfig
untuk pengguna Anda (misalnya ~/.gitconfig
pada nix * atau sistem MacOS):
[alias]
hide = update-index --assume-unchanged
unhide = update-index --no-assume-unchanged
unhide-all = ! git ls-files -v | grep '^[a-z]' | cut -c3- | xargs git update-index --no-assume-unchanged --
hidden = ! git ls-files -v | grep '^[a-z]' | cut -c3-
git hidden
, Anda dapat mencapai efek yang sama tanpa alias shell atau skrip, menggunakan !
seperti ini:hidden = ! git ls-files -v | grep '^h' | cut -c3-
--really-refresh
tidak (atau tidak lagi melakukannya, mungkin memang pernah) menghapus flag asumsikan tidak berubah pada file indeks.
Jika Anda ingin membatalkan semua file yang diterapkan menganggap tidak berubah dengan status apa pun, tidak hanya di-cache (git menandai mereka berdasarkan karakter dalam huruf kecil), Anda dapat menggunakan perintah berikut:
git ls-files -v | grep '^[a-z]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
git ls-files -v
akan mencetak semua file dengan statusnyagrep '^[a-z]'
akan memfilter file dan pilih hanya asumsikan tidak berubahcut -c 3-
akan menghapus status dan hanya menyisakan jalur, memotong dari karakter 3-rd hingga akhirtr '\012' '\000'
akan mengganti karakter ujung baris (\ 012) menjadi nol karakter (\ 000)xargs -0 git update-index --no-assume-unchanged
akan melewati semua jalur yang dipisahkan oleh karakter nol git update-index --no-assume-unchanged
untuk membatalkanMenambah @adardesign
jawaban, jika Anda ingin mengatur ulang semua file yang telah ditambahkan ke assume-unchanged
daftar no-assume-unchanged
sekaligus, Anda dapat melakukan hal berikut:
git ls-files -v | grep '^h' | sed 's/^..//' | sed 's/\ /\\ /g' | xargs -I FILE git update-index --no-assume-unchanged FILE || true
Ini hanya akan menghapus keluaran dua karakter dari grep yaitu "h "
, kemudian melarikan diri dari ruang yang mungkin ada dalam nama file, dan akhirnya || true
akan mencegah perintah untuk mengakhiri sebelum waktunya jika beberapa file dalam loop memiliki kesalahan.
Jika Anda menggunakan Git Extensions , ikuti langkah-langkah di bawah ini:
Kamu selesai.
Tidak ada di sini yang tidak tercakup. Tetapi ingin menambahkan 2 sen saya. Kadang-kadang, saya menjalankan build dan mengubah banyak file dan kemudian saya ingin mengerjakan sesuatu, jadi perintah ini sangat membantu saya.
git update-index --assume-unchanged `git status | grep modified | sed 's|modified:||g'| xargs`
Semoga orang lain juga merasakan manfaatnya.
.gitignore
untuk mengabaikan artefak bangunan Anda.
.gitignore
tapi itu kadang-kadang, dalam pengalaman saya tidak cukup. Tapi saya mengerti konteks di mana Anda mengatakan ini.
Tidak ada solusi yang bekerja untuk saya di Windows - tampaknya menggunakan modal H
daripada h
untuk status file dan perintah grep memerlukan tanda sisipan tambahan ^
juga mewakili awal baris serta meniadakan karakter berikutnya.
Solusi Windows
git ls-files -v | grep '^^H'
untuk membuat daftar semua file yang tidak di-cachegit ls-files -v | grep '^^H' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-skip-worktree
untuk membatalkan file yang dilewati semua file yang dilakukan melalui update-index --skip-worktree
git ls-files -v | grep '^^H]' | cut -c 3- | tr '\012' '\000' | xargs -0 git update-index --no-assume-unchanged
untuk membatalkan file yang dilewati semua file yang dilakukan melalui update-index --assume-unchanged
git ls-files -v | grep '^^H'
untuk kembali mendaftar semua file yang tidak di-cache dan memeriksa apakah perintah di atas telah berfungsi - ini seharusnya tidak mengembalikan apa pun