Saya punya proyek di mana saya harus mengubah mode file dengan chmod
ke 777 saat mengembangkan, tetapi yang seharusnya tidak berubah dalam repo utama.
Git mengambil chmod -R 777 .
dan menandai semua file yang diubah. Apakah ada cara untuk membuat perubahan mode Abaikan Git yang telah dibuat ke file?
git diff
, dan yang karenanya tidak ingin mengubah file konfigurasi Git mereka: Anda dapat menggunakan jawabangit diff -G.
per Zed di sini .Jawaban:
Mencoba:
Dari git-config (1) :
The
-c
flag dapat digunakan untuk mengatur opsi ini untuk satu-off perintah:Dan
--global
bendera akan membuatnya menjadi perilaku default untuk pengguna yang masuk.Perubahan pengaturan global tidak akan diterapkan ke repositori yang ada. Selain itu,
git clone
dangit init
secara eksplisit diaturcore.fileMode
ketrue
dalam konfigurasi repo seperti yang dibahas dalam Git global core.fileMode palsu yang ditimpa secara lokal pada klonPeringatan
core.fileMode
bukan praktik terbaik dan harus digunakan dengan hati-hati. Pengaturan ini hanya mencakup bit mode yang dapat dieksekusi dan tidak pernah bit baca / tulis. Dalam banyak kasus Anda merasa Anda perlu pengaturan ini karena Anda melakukan sesuatu sepertichmod -R 777
, membuat semua file Anda dapat dieksekusi. Tetapi dalam kebanyakan proyek sebagian besar file tidak perlu dan tidak boleh dieksekusi karena alasan keamanan .Cara yang tepat untuk menyelesaikan situasi semacam ini adalah dengan menangani izin folder dan file secara terpisah, dengan sesuatu seperti:
Jika Anda melakukannya, Anda tidak perlu menggunakannya
core.fileMode
, kecuali di lingkungan yang sangat langka.sumber
git config --global core.filemode false
Anda hanya perlu melakukan ini sekali untuk semua repo.git config
Perintah menulis pengaturan ke file config yang benar (.git/config
hanya untuk repositori saat ini, atau~/.gitconfig
jika digunakan dengan--global
).batalkan perubahan mode di pohon kerja:
Atau di mingw-git
sumber
-d'\n'
bagian darixargs
karena ini merupakan argumen ilegal (dan tidak diperlukan).tr '\n' '\0'
dan kemudian menggunakan-0
arg to xargs untuk menggunakan NUL sebagai pembatas.tr
masalahnya berhasil! Inilah perintah lengkap untuk OSX:git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7-|tr '\n' '\0'|xargs -0 chmod -x
Jika Anda ingin mengatur opsi ini untuk semua repo Anda, gunakan
--global
opsi ini.Jika ini tidak berhasil, Anda mungkin menggunakan versi git yang lebih baru, jadi coba
--add
opsi.Jika Anda menjalankannya tanpa opsi - global dan direktori kerja Anda bukan repo, Anda akan mendapatkannya
sumber
--add
, seperti digit config --add --global core.filemode false
Jika
tidak bekerja untuk Anda, lakukan secara manual:
cd ke dalam folder .git:
edit file konfigurasi:
ubah true menjadi false
->
simpan, keluar, pergi ke folder atas:
pasang kembali git
kamu selesai!
sumber
.git/config
, sederhanagit config core.fileMode false
di root proyek Anda sudah cukup. Jika Anda mengedit file konfigurasi, Anda lebih baik menghapus direktif sepenuhnya, sehingga yang global diambil.global
opsi melakukan hal yang persis sama dengan mengedit secara manual. Git / config~/.gitconfig
, dan~/project/.git/config
)git init
haruskah kita mengatur filemode kembali ke true?Menambahkan ke jawaban Greg Hewgill (menggunakan
core.fileMode
variabel config):Anda dapat menggunakan
--chmod=(-|+)x
opsi git update-index (versi rendah dari "git add") untuk mengubah mengeksekusi izin dalam indeks, dari mana ia akan diambil jika Anda menggunakan "git commit" (dan bukan "git commit -a ").sumber
Anda dapat mengonfigurasinya secara global:
git config --global core.filemode false
Jika hal di atas tidak bekerja untuk Anda, alasannya mungkin konfigurasi lokal Anda menimpa konfigurasi global.
Hapus konfigurasi lokal Anda untuk membuat konfigurasi global berlaku:
git config --unset core.filemode
Atau, Anda dapat mengubah konfigurasi lokal Anda ke nilai yang benar:
git config core.filemode false
sumber
git config -l
(daftarkan konfigurasi saat ini - baik lokal maupun global)Jika Anda telah menggunakan perintah chmod maka periksa perbedaan file, Ini menunjukkan mode file sebelumnya dan mode file saat ini seperti:
mode baru: 755
mode lama: 644
atur mode lama semua file menggunakan perintah di bawah ini
sudo chmod 644 .
sekarang atur core.fileMode ke false dalam file konfigurasi baik menggunakan perintah atau secara manual.
lalu terapkan perintah chmod untuk mengubah izin semua file seperti
dan sekali lagi atur core.fileMode menjadi true.
Untuk praktik terbaik, jangan selalu membuat core.fileMode salah.
sumber
For best practises don't Keep core.fileMode false always
apa maksudmu, kau harus menjelaskan itu.For best practises don't Keep core.fileMode false always.
Beberapa sistem file (FAT misalnya) tidak mendukung izin file, sehingga OS akan melaporkan nilai default (766 pada sistem saya). Dalam hal ini,core.filemode
sangat diperlukan dalam konfigurasi lokal, kecuali jika Anda ingincore.filemode=false
maka git akan mengabaikan eksekusi perubahan bit, tidak perlu mengubah izin lokal. Kecuali jika Anda sudah menambahkan perubahan izin ke indeks, dalam hal ini Anda melewatkan langkah di mana Anda perlugit add
setelah Anda mematikancore.filemode
.Dengan mendefinisikan alias berikut (dalam ~ / .gitconfig) Anda dapat dengan mudah menonaktifkan sementara perintah fileMode per git:
Ketika alias ini diawali dengan perintah git, perubahan mode file tidak akan muncul dengan perintah yang akan menunjukkannya. Sebagai contoh:
sumber
Jika Anda ingin mengatur filemode ke false dalam file konfigurasi secara rekursif (termasuk submodul):
find -name config | xargs sed -i -e 's/filemode = true/filemode = false/'
sumber
git submodule foreach git config core.fileMode false
Solusi sederhana:
Tekan perintah sederhana ini di folder proyek ( itu tidak akan menghapus perubahan asli Anda) ... itu hanya akan menghapus perubahan yang telah dilakukan saat Anda mengubah izin folder proyek
perintah di bawah ini:
git config core.fileMode false
Mengapa semua file yang tidak perlu ini dimodifikasi: karena Anda telah mengubah izin folder proyek dengan memuji sudo chmod -R 777 ./yourProjectFolder
kapan Anda akan memeriksa perubahan apa yang tidak Anda lakukan? Anda menemukan seperti di bawah ini saat menggunakan nama file git diff
sumber
Ini bekerja untuk saya:
atau mundur, tergantung pada sistem operasi Anda
sumber