Memperbarui dan melakukan hanya izin file menggunakan kontrol versi git

187

Baru saja mengubah some.shfile menjadi file yang dapat dieksekusi ( chmod 755 ...), izin diperbarui tetapi bukan kontennya. Apakah ada cara untuk mengkomit file ke git, sehingga bit yang dapat dieksekusi akan dikembalikan / ditetapkan pada clone / checkout / pull ?

Pembaruan: bagaimana saya bisa melacak bahwa izin baru telah diserahkan github?

BreakPhreak
sumber

Jawaban:

190

Secara default, git akan memperbarui mengeksekusi izin file jika Anda mengubahnya. Itu tidak akan mengubah atau melacak izin lainnya.

Jika Anda tidak melihat perubahan apa pun saat memodifikasi izin eksekusi, Anda mungkin memiliki konfigurasi di git yang mengabaikan mode file.

Lihatlah proyek Anda, di .gitfolder untuk configfile dan Anda akan melihat sesuatu seperti ini:

[core]
    filemode = false

Anda dapat mengubahnya ke truedalam editor teks favorit Anda, atau menjalankan:

git config core.filemode true

Kemudian, Anda harus dapat melakukan secara normal file Anda. Itu hanya akan melakukan perubahan izin.

Vincent B.
sumber
Terima kasih! bagaimana saya bisa melacak bahwa perubahan izin telah diserahkan github?
BreakPhreak
2
Anda dapat melihatnya ketika Anda melihat file (misalnya, pada file Rails gitignore , Anda akan menemukan 100644 sebagai izin file)
Vincent B.
8
Membuat perubahan izin pada Windows dengan git (sebenarnya mengubah izin file dan melakukan): blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html
fooMonster
39
Jawaban ini salah! Git hanya melacak jika suatu file dapat dieksekusi atau tidak. Itu tidak melacak izin file lain seperti dapat ditulis atau dibaca. Baca stackoverflow.com/a/11231682/2311074 untuk lebih lanjut.
Adam
Bagi saya webstorm tidak menangkap perubahan, tetapi dalam git status, saya melihat perubahan ..
Townsheriff
193

Artikel @fooMonster bekerja untuk saya

# git ls-tree HEAD
100644 blob 55c0287d4ef21f15b97eb1f107451b88b479bffe    script.sh

Seperti yang Anda lihat, file tersebut memiliki izin 644 (mengabaikan 100). Kami ingin mengubahnya ke 755:

# git update-index --chmod=+x script.sh

komit perubahan

# git commit -m "Changing file permissions"
[master 77b171e] Changing file permissions
0 files changed, 0 insertions(+), 0 deletions(-)
mode change 100644 => 100755 script.sh
ewwink
sumber
7
Perlu dicatat bahwa Anda benar-benar harus menggunakan '-x / + x'. Anda tidak dapat mengatur izin atau bitmask lainnya.
Devolus
Catatan menggunakan git commit -atidak melakukan apa pun untuk saya, namun pengaturan pesan pada baris perintah lakukan. Sedikit
aneh
Perintah perintah harus: # git update-index --chmod=+x script.sh # git ls-tree HEAD # git commit -m "Changing file permissions" # git push
SimonDepelchin
30

Tidak bekerja untukku.

Mode ini benar, file perms telah diubah, tetapi git mengatakan tidak ada pekerjaan yang harus dilakukan.

git init
git add dir/file
chmod 440 dir/file
git commit -a

Masalahnya tampaknya bahwa git hanya mengenali perubahan izin tertentu.

Otheus
sumber
51
Benar - gitbenar - benar hanya melacak apakah file dapat dieksekusi atau tidak, bukan set lengkap izin * nix. Jadi Anda harus beralih file antara executable / tidak untuk itu untuk berpikir Anda telah mengubah sesuatu yang layak dilakukan ...
twalberg
Saya tidak dapat menemukan dokumentasi yang jelas: pemicu pasca tindakan apa yang mungkin saya gunakan untuk mengatur perms yang sesuai?
Otheus
2
Ya, ada post-checkoutkaitannya git, yang akan mencakup beberapa kasus, tapi saya tidak yakin apakah itu akan mencakup semua hal yang mungkin memperbarui file di worktree Anda. Anda mungkin lebih baik hanya memiliki skrip shell tambahan di repo Anda yang mengatur segala sesuatunya. Atau, ada beberapa proyek di luar sana yang menambah gituntuk menyimpan metadata, tapi saya belum pernah benar-benar mencobanya ...
twalberg
1
Saya mengubah izin file ke 777 dan melakukannya git update-index --refresh, tetapi diff menunjukkan old mode 100644 new mode 100755. Itu tidak memperbarui semua izin
hudac
lihat @tishma jawab di sini stackoverflow.com/questions/14557106/… . Inilah yang berhasil bagi saya
gary69