216 votes

Permissions des fichiers Git sous Windows

J'ai lu quelques questions concernant les autorisations de fichiers dans Git et je suis toujours un peu perdu. J'ai un repo sur GitHub qui a bifurqué d'un autre. Après la fusion, ils devraient être identiques. Cependant :

$ 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

J'ai essayé de changer les permissions des fichiers, mais cela ne modifie pas les résultats de la comparaison.

432voto

dedek Points 471

J'ai trouvé la solution pour modifier les permissions (également) sous Windows ici : http://blog.lesc.se/2011/11/how-to-change-file-premissions-in-git.html

Par exemple, la commande suivante ajoute la permission d'exécution de l'utilisateur à un fichier arbitraire :

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

8 votes

+1 : exactement ce dont j'avais besoin pour m'assurer que les scripts du shell que je commets à partir de Windows (où je dispose de core.filemode réglé sur false ) ont en fait le bit d'exécution activé.

0 votes

Dans mon cas, j'ai également ajouté une nouvelle ligne au fichier, et ce n'est qu'à ce moment-là que j'ai pu commiter

8 votes

Sous Windows, en utilisant git-bash, j'avais besoin d'un fichier --add à l'exécution pour une raison quelconque : git update-index --add --chmod=+x <file> . Après cela, le fichier était déjà en scène avec le chmod

139voto

Corey Henderson Points 3487

D'après une autre question posée ici sur stackoverflow : Comment faire pour que Git ignore les changements de mode de fichier (chmod) ?

Essayez :

git config core.filemode false

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

1 votes

Merci. J'ai vu ça aussi. Je l'ai essayé et ça n'a fait aucune différence.

4 votes

J'ai eu les mêmes problèmes que le PO et je n'ai pas réussi à faire des changements, peu importe les moyens utilisés. hard J'ai essayé de réinitialiser. Ça a marché pour moi.

13 votes

Le fichier [project]/.git/config peut contenir le même paramètre et remplacera ~/.gitconfig. Si vous essayez de le définir globalement, assurez-vous qu'il n'est pas remplacé localement.

33voto

Benoit Blanchon Points 2252

One-liner pratique pour Git Bash :

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

Il marquera tous les .sh comme exécutable. Après cela, il suffit de git commit .

2 votes

Petite correction pour la phrase de @benoit-blanchon... la .sh doit être cité. trouver . -name ' .sh' | xargs git update-index --chmod=+x

0 votes

Vous avez raison, j'ai modifié la réponse. Merci @SteventheEasilyAmused.

0 votes

Il est préférable d'éviter d'utiliser xargs (une explication plus approfondie du pourquoi peut être trouvée aquí ). Essayez plutôt : find . -name '*.sh' -type 'f' -exec git update-index --chmod=+x {} + . Ceci exécutera la commande pour chaque fichier que find trouve.

19voto

skiphoppy Points 16563

Si vous utilisez Cygwin git (ou Linux git, aussi, je suppose), il y a de fortes chances que votre paramètre core.filemode ait été défini au niveau du projet dans $projdir/.git/config . J'ai découvert que je devais faire ce qui suit pour que mon git Cygwin et mon git Windows coexistent gentiment sur un système de fichiers Windows sans que des changements inexistants de filemode n'apparaissent tout le temps :

  • supprimer la ligne définissant core.filemode dans $projdir/.git/config
  • dans le git de Windows, exécutez "git config --global core.filemode false".

Cela permet à mon git Cygwin de continuer à voir les changements de mode de fichier, qui sont généralement pertinents, tout en demandant au git Windows d'ignorer les changements de mode de fichier qu'il voit, qui sont généralement des faux positifs.

13voto

Sireesh Points 802

Vérifiez d'abord les permissions des fichiers en utilisant la commande ci-dessous.

git ls-files --stage

Puis modifiez les autorisations. Ici, "x" représente les autorisations d'exécution.

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

Maintenant, revérifiez les permissions.

git ls-files --stage

\==============================================

si vous utilisez un PC Windows, mais que vous déployez sur une machine linux. Exécutez la commande ci-dessous en premier lieu pour le rendre compatible avec une machine linux.

dos2unix nom de script.ext nom de script.ext

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X