Autorizzazioni di file Git su Windows


173

Ho letto alcune domande sui permessi dei file in Git e sono ancora un po 'confuso. Ho un repository su GitHub biforcuto da un altro. Dopo l'unione, dovrebbero essere identici. Però:

$ 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

Ho provato a cambiare i permessi dei file, ma non altera i risultati delle differenze.

Risposte:


347

Ho trovato la soluzione su come modificare le autorizzazioni (anche) su Windows qui: http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Ad esempio, il seguente comando aggiunge l'autorizzazione di esecuzione dell'utente a un file arbitrario:

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

6
+1: esattamente ciò di cui avevo bisogno per assicurarmi che gli script di shell che commetto da Windows (dove ho core.filemodeimpostato false) abbiano effettivamente impostato il bit di esecuzione.
tomlogic

Nel mio caso ho anche aggiunto una nuova riga al file e solo allora sono stato in grado di eseguire il commit
oshai

5
In Windows, utilizzando git-bash, avevo bisogno di una --addbandiera per l'esecuzione per qualche motivo: git update-index --add --chmod=+x <file>. Dopo questo, il file era già in scena con il chmod
Jefferson Quesado il

Non ha più alcun effetto, né in git bash né nel prompt di cmd.exe.
Ben

107

Da un'altra domanda qui su StackOverflow: come faccio a fare in modo che Git ignori le modifiche alla modalità file (chmod)?

Provare:

git config core.filemode false

Da 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.

Grazie. L'ho visto anche io. L'ho provato e non ha fatto differenza.
Synesso,

3
Ho avuto problemi simili all'OP e non sono riuscito a eseguire le modifiche, indipendentemente da come hardho tentato di ripristinare. Questo ha fatto il trucco per me.
Jo-Herman Haugholt,

11
[project] /. git / config può contenere la stessa impostazione e sovrascriverà ~ / .gitconfig. Se stai cercando di impostarlo a livello globale, assicurati che non venga sovrascritto localmente.
File binario

1
Trovo che ciò sia necessario anche su NTFS, purtroppo.
Marc.2377,

1
Questa è la risposta!
Andrew Surdu,

29

Comodo one-liner per Git Bash:

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

Contrassegnerà tutti i .shfile come eseguibili. Dopo quello, devi solo git commit.


2
Piccola correzione per @ benoit-blanchon one-liner ... il .sh deve essere citato. trova . -name ' .sh' | xargs git update-index --chmod = + x
Steven the

Hai ragione, ho modificato la risposta. Grazie @SteventheEasilyAmused.
Benoit Blanchon,

15

Se usi Cygwin git (o anche Linux git, suppongo), ci sono buone probabilità che la tua impostazione core.filemode sia stata impostata a livello di progetto in $ projdir / .git / config. Ho scoperto che dovevo fare quanto segue per far coesistere bene il mio Cygwin git e il mio Windows Git su un filesystem Windows senza che si presentassero continuamente modifiche inesistenti in modalità file:

  • elimina l'impostazione della linea core.filemode in $ projdir / .git / config
  • in Windows Git, eseguire "git config --global core.filemode false"

Ciò consente al mio Cygwin git di continuare a vedere le modifiche alla modalità file, che di solito sono rilevanti, mentre istruisce Windows Git ad ignorare le modifiche alla modalità file che vede, che di solito sono falsi positivi.


6

Per prima cosa controlla le autorizzazioni del file usando il comando seguente.

git ls-files --stage

Quindi modificare le autorizzazioni. Qui "x" rappresenta le autorizzazioni di esecuzione.

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

Ora verifica nuovamente le autorizzazioni.

git ls-files --stage

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

se si utilizza un PC Windows, ma si sta distribuendo su una macchina Linux. Eseguire il comando seguente in primo luogo per renderlo compatibile per l'esecuzione su macchine Linux

dos2unix scriptname.ext scriptname.ext


Non c'è modo di fare qualcosa del genere git update-index --chmod=1777 'scriptname.ext'?
Alex Barker,

Sei passato al percorso in cui esiste il file di script? @alex
Sireesh Yarlagadda,

5

L'ho risolto modificando i permessi dei file in Ubuntu, commit, push e tutto OK. Sembra che non funzionerebbe con msysgit su Windows / NTFS.


Consiglio a GitHub per Windows. Interfaccia meravigliosa e shell davvero gradevole, ho anche reso relativamente semplice l'installazione dei tasti ssh e l'installazione di git flow.
Sangoku,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.