git 1.7.12
Saya ingin menandai semua file di bawah direktori tertentu sebagai asumsikan-tidak berubah.
1) git update-index --assume-unchaged dir/
memberikan "Mengabaikan jalur."
2) git update-index --assume-unchaged dir/*
cepat gagal karena akan menemukan file yang tidak dilacak, oleh karena itu memberikan "fatal: Tidak dapat menandai file" dan berhenti.
3) Coba buat daftar file untuk ditandai. cd
ke direktori yang diinginkan dan kemudian jalankan git ls-files | tr '\n' ' ' | git update-index --assume-unchanged
. Ini tidak menghasilkan pesan kesalahan, tetapi tidak berhasil menandai file. Bagian pertama dari perintah`` git ls-files | tr '\n' ' '
dengan benar menghasilkan daftar yang dipisahkan spasi dari semua file yang ingin saya tandai. Jika saya menyalin dan menempelkan output dari perintah itu ke baris perintah, maka git update-index
perintah itu berfungsi. Apa yang tidak berfungsi dengan pipa?
Tidak, tidak cukup bagi saya untuk menambah dir
.gitignore. Saya perlu file-file ini berada di repositori, tetapi perubahan yang tidak diinginkan akan dibuat secara lokal yang perlu diabaikan sehingga pengguna dapat melakukan penarikan.
sumber
git ls-files -z
git ls-files -z | xargs -0 git update-index --no-assume-unchanged
, saya akan berpikir ...git ls-files -z | git update-index -z --stdin
lebih bersih.The
find
perintah dari GNU findutils memiliki-exec
pilihan yang menghilangkan sebagian besar kerumitan menggunakanxargs
, meskipun sintaks adalah sedikit istimewa. Namun itu menangani dengan sempurna nama file dengan spasi.Perintah ini akan membuat git menganggap semua file di dalam dan di bawah direktori yang terdaftar tidak berubah:
Find mengambil setiap argumen setelah
-exec
sampai;
(yang Anda harus keluar agar shell Anda tidak memakannya) dan menjalankannya sekali untuk setiap file yang ditemukan, sambil mengganti{}
(sekali lagi, satu kutipan sehingga shell Anda tidak akan memakannya) dengan nama file yang ditemukan.Menggunakan
find
kriteria pencocokan (kedalaman rekursi maksimum, apakah yang cocok adalah file atau direktori, apakah nama file cocok dengan ekspresi) dan-exec
Anda dapat melakukan semua jenis hal yang berguna.Tidak yakin tentang implementasi
find
perintah lainnya. YMMV.sumber
-exec
adalah opsi standar . Anda juga dapat-exec git update-index --assume-unchanged {} +
(juga ditentukan oleh standar) yang meneruskan beberapa nama file ke perintah sekaligus, mengurangi berapa kali perintah git dipanggil.Tambahkan nama direktori ke
.git/info/exclude
. Ini berfungsi untuk file yang tidak terlacak.sumber
Ya,
bekerja dengan file saja, tidak dengan direktori. Saya pikir, salah satu cara yang lebih cepat:
sumber
cd
, Anda dapat melewati dir sebagai argumen akhir:git ls-files -- $DIR | xargs -l git update-index --assume-unchanged -- $DIR
.