Pertanyaan Bagaimana cara membuat perubahan mode file Git ignore (chmod)?


Saya memiliki proyek di mana saya harus mengubah mode file dengan chmod ke 777 saat mengembangkan, tetapi yang seharusnya tidak berubah dalam repo utama.

Git menjawab chmod -R 777 . dan menandai semua file sebagai diubah. Apakah ada cara untuk membuat perubahan mode Git ignore yang telah dibuat ke file?


1882
2017-10-16 21:43


asal


Jawaban:


Mencoba:

git config core.fileMode false

Dari git-config (1):

core.fileMode
       If false, the executable bit differences between the index and the
       working copy are ignored; useful on broken filesystems like FAT.
       See git-update-index(1). True by default.

Itu -c flag dapat digunakan untuk mengatur opsi ini untuk satu kali perintah:

git -c core.fileMode=false diff

Dan itu --global flag akan membuatnya menjadi perilaku default untuk pengguna yang masuk.

git config --global core.fileMode false

PERINGATAN

core.fileMode bukan praktik terbaik dan harus digunakan dengan hati-hati. Pengaturan ini hanya mencakup bit mode yang dapat dieksekusi dan tidak pernah membaca / menulis bit. Dalam banyak kasus, Anda pikir Anda memerlukan pengaturan ini karena Anda melakukan sesuatu seperti itu chmod -R 777, membuat semua file Anda dapat dieksekusi. Tetapi di sebagian besar proyek kebanyakan file tidak perlu dan tidak boleh dieksekusi karena alasan keamanan.

Cara yang tepat untuk mengatasi situasi semacam ini adalah dengan menangani izin folder dan file secara terpisah, dengan sesuatu seperti:

find . -type d -exec chmod a+rwx {} \; # Make folders traversable and read/write
find . -type f -exec chmod a+rw {} \;  # Make files read/write

Jika Anda melakukan itu, Anda tidak perlu menggunakannya core.fileMode, kecuali di lingkungan yang sangat langka.


3109
2017-10-16 21:53



batalkan perubahan mode di pohon kerja:

git diff --summary | grep --color 'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -d'\n' chmod +x
git diff --summary | grep --color 'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -d'\n' chmod -x

Atau di mingw-git

git diff --summary | grep  'mode change 100755 => 100644' | cut -d' ' -f7- | xargs -e'\n' chmod +x
git diff --summary | grep  'mode change 100644 => 100755' | cut -d' ' -f7- | xargs -e'\n' chmod -x

246
2018-01-18 02:20



Jika Anda ingin mengatur opsi ini untuk semua repositori Anda, gunakan --global pilihan.

git config --global core.filemode false

Jika ini tidak berhasil, Anda mungkin menggunakan versi git yang lebih baru, jadi cobalah --add pilihan.

git config --add --global core.filemode false

Jika Anda menjalankannya tanpa opsi -global dan direktori kerja Anda bukan repo, Anda akan mendapatkannya

error: could not lock config file .git/config: No such file or directory

115
2018-04-21 12:00



Jika

git config --global core.filemode false

tidak bekerja untuk Anda, lakukan secara manual:

cd into yourLovelyProject folder

cd ke dalam folder .git:

cd .git

edit file konfigurasi:

nano config

ubah benar menjadi salah

[core]
        repositoryformatversion = 0
        filemode = true

->

[core]
        repositoryformatversion = 0
        filemode = false

simpan, keluar, ke folder atas:

cd ..

kembalikan gitnya

git init

kamu selesai!


66
2017-08-06 13:10



Menambah ke Greg Hewgill menjawab (menggunakan core.fileMode variabel konfigurasi):

Kamu dapat memakai --chmod=(-|+)x opsi dari git update-index (versi tingkat 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").


48
2017-10-16 22:03



Anda dapat mengonfigurasikannya secara global:

git config --global core.filemode false

Jika hal di atas tidak berhasil 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 tepat:

git config core.filemode false


32
2018-01-21 09:12



Jika Anda telah menggunakan chmod perintah sudah kemudian memeriksa perbedaan file, Ini menunjukkan mode file sebelumnya dan mode file saat ini seperti:

mode baru: 755

mode lama: 644

mengatur mode lama dari semua file menggunakan perintah di bawah ini

sudo chmod 644 .

sekarang atur core.fileMode menjadi false dalam file konfigurasi baik menggunakan perintah atau secara manual.

git config core.fileMode false

kemudian terapkan perintah chmod untuk mengubah hak akses dari semua file seperti

sudo chmod 755 .

dan lagi mengatur core.fileMode menjadi true.

git config core.fileMode true

Untuk praktik terbaik, jangan selalu selalu menyimpan core.fileMode.


15
2017-10-13 07:34



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/'


14
2017-07-16 12:23



Dengan mendefinisikan alias berikut (dalam ~ / .gitconfig) Anda dapat dengan mudah menonaktifkan sementara perintah fileMode per git:

nfm = "!f(){ git -c core.fileMode=false $@; };f"

Ketika alias ini diawali dengan perintah git, perubahan mode file tidak akan muncul dengan perintah yang seharusnya menunjukkannya. Sebagai contoh:

git nfm status

14
2017-07-24 15:01