Izin file git di Windows


173

Saya sudah membaca beberapa pertanyaan tentang izin file di Git dan saya masih agak bingung. Saya punya repo di GitHub yang bercabang dari yang lain. Pasca menggabungkan, mereka harus identik. Namun:

$ git diff --summary origin/epsilon master/epsilon
 mode change 100644 => 100755 ants/dist/sample_bots/csharp/compile.sh
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/MyBot.coffee
 mode change 100644 => 100755 ants/dist/starter_bots/coffeescript/ants.coffee
 mode change 100644 => 100755 ants/util/block_test.sh
 mode change 100644 => 100755 manager/mass_skill_update.py
 mode change 100644 => 100755 worker/jailguard.py
 mode change 100644 => 100755 worker/release_stale_jails.py
 mode change 100644 => 100755 worker/start_worker.sh

Saya sudah mencoba mengubah izin file, tetapi tidak mengubah hasil diff.

Jawaban:


347

Saya menemukan solusi bagaimana mengubah izin (juga) di Windows di sini: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Sebagai contoh, perintah berikut menambahkan izin eksekusi pengguna ke file arbitrer:

git update-index --chmod=+x <file>

6
+1: persis apa yang saya butuhkan untuk memastikan skrip shell yang saya komit dari Windows (di mana saya telah core.filemodemengatur untuk false) benar-benar memiliki bit set eksekusi.
tomlogic

Dalam kasus saya, saya juga menambahkan baris baru ke file, dan baru kemudian dapat melakukan
oshai

5
Pada Windows, menggunakan git-bash, aku butuh --addbendera untuk eksekusi untuk beberapa alasan: git update-index --add --chmod=+x <file>. Setelah ini, file sudah di atas panggung dengan chmod
Jefferson Quesado

Tidak memiliki efek lagi, baik di git bash maupun di cmd.exe prompt.
Ben

107

Dari pertanyaan lain di sini di stackoverflow: Bagaimana cara saya membuat Git abaikan file mode (chmod) berubah?

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.

Terima kasih. Saya juga melihatnya. Mencobanya dan tidak ada bedanya.
Synesso

3
Saya memiliki masalah yang mirip dengan OP dan tidak dapat melakukan perubahan tidak peduli bagaimana hardsaya mencoba mengatur ulang. Ini berhasil bagi saya.
Jo-Herman Haugholt

11
[project] /. git / config dapat berisi pengaturan yang sama dan akan menimpa ~ / .gitconfig. Jika Anda mencoba mengaturnya secara global, pastikan itu tidak diganti secara lokal.
Binary Phile

1
Saya menemukan ini perlu pada NTFS juga, sayangnya.
Marc.2377

1
Itu jawabannya!
Andrew Surdu

29

Satu-liner berguna untuk Git Bash:

find . -name '*.sh' | xargs git update-index --chmod=+x

Ini akan menandai semua .shfile sebagai executable. Setelah itu, Anda hanya perlu git commit.


2
Koreksi kecil untuk @ benoit-blanchon one-liner ... .sh harus dikutip. Temukan . -nama ' .sh' | xargs git update-index --chmod = + x
Steven yang Mudah Dihibur

Anda benar, saya mengedit jawabannya. Terima kasih @SteventheEasilyAmused.
Benoit Blanchon

15

Jika Anda menggunakan Cygwin git (atau Linux git juga, saya kira), ada kemungkinan besar pengaturan core.filemode Anda telah ditetapkan pada tingkat proyek dalam $ projdir / .git / config. Saya menemukan bahwa saya harus melakukan yang berikut untuk mendapatkan Cygwin git dan Windows git saya untuk hidup berdampingan dengan baik pada sistem file Windows tanpa perubahan filemode yang tidak ada yang muncul setiap saat:

  • hapus baris pengaturan core.filemode di $ projdir / .git / config
  • di Windows git, jalankan "git config --global core.filemode false"

Ini memungkinkan Cygwin git saya untuk terus melihat perubahan filemode, yang biasanya relevan, sementara memerintahkan Windows git untuk mengabaikan perubahan filemode yang dilihatnya, yang biasanya positif palsu.


6

Pertama periksa izin file menggunakan perintah di bawah ini.

git ls-files --stage

Kemudian ubah izin. Di sini "x" mewakili izin eksekusi.

git update-index --chmod=+x 'scriptname.ext'

Sekarang verifikasi ulang izinnya.

git ls-files --stage

============================================

jika Anda menggunakan PC Windows, tetapi menggunakan mesin linux. Jalankan perintah di bawah ini di tempat pertama untuk membuatnya kompatibel untuk dijalankan di mesin linux

dos2unix scriptname.ext scriptname.ext


Apakah tidak ada cara untuk melakukan sesuatu seperti itu git update-index --chmod=1777 'scriptname.ext'?
Alex Barker

Apakah Anda menavigasi ke jalur, tempat file skrip ada? @ Alex
Sireesh Yarlagadda

5

Saya memperbaikinya dengan mengubah izin file di Ubuntu, melakukan, mendorong, dan semua OK. Tampaknya itu tidak akan berfungsi dengan msysgit di Windows / NTFS.


Saya dapat merekomendasikan GitHub untuk windows. Antarmuka yang luar biasa dan shell yang sangat bagus, saya bahkan membuat setup kunci ssh relatif mudah dan menginstal git flow.
Sangoku
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.