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.)
git
version-control
git-index
adardesign
sumber
sumber
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'
sumber
git ls-files -v|grep '^h'|cut -c3-
, yang akan memberi Anda hanya nama file, tanpa awalan "h".assume-unchanged
miliki, gunakan sajagit update-index --really-refresh
. Dengan perintah itu, Anda tidak perlu mencari file dengangit 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
:Cara mengatur alias (jika Anda belum tahu):
Contoh:
Setelah menyimpan ini untuk Anda
.gitconfig
, Anda dapat menjalankan perintah pembersih.atau
Ini dokumentasi git sangat membantu.
Sesuai komentar, ini juga alias bermanfaat untuk mencari tahu file apa yang saat ini disembunyikan:
sumber
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:
Di sini Anda akan menemukan berbagai opsi - cara menangani dengan fungsi pembaruan-indeks.
[jika Anda tidak tahu nama file]
[jika Anda tahu nama file]
akan mengembalikan semua file yang telah ditambahkan dalam daftar abaikan.
sumber
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.Saya berasumsi (heh) maksudmu
--assume-unchanged
, karena saya tidak melihat--assume-changed
opsi. Kebalikannya--assume-unchanged
adalah--no-assume-unchanged
.sumber
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:
Untuk membuat daftar semua file yang dianggap tidak berubah:
Untuk mengatur ulang semua file yang diasumsikan tidak berubah kembali menjadi normal:
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):
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):sumber
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
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 nolgit update-index --no-assume-unchanged
untuk membatalkansumber
Menambah
@adardesign
jawaban, jika Anda ingin mengatur ulang semua file yang telah ditambahkan keassume-unchanged
daftarno-assume-unchanged
sekaligus, Anda dapat melakukan hal berikut: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.sumber
Jika Anda menggunakan Git Extensions , ikuti langkah-langkah di bawah ini:
Kamu selesai.
sumber
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.
sumber
.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
daripadah
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 melaluiupdate-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 melaluiupdate-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 punsumber
Jika Anda menggunakan gerhana, Anda mungkin menemukan hal-hal berikut yang bermanfaat:
sumber