Autorisations de fichier Git sur Windows


173

J'ai lu quelques questions concernant les autorisations de fichiers dans Git et je suis encore un peu confus. J'ai un dépôt sur GitHub dérivé d'un autre. Après la fusion, ils doivent être identiques. Toutefois:

$ 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 autorisations de fichier, mais cela ne modifie pas les résultats de diff.

Réponses:


347

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

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

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

6
+1: exactement ce dont j'avais besoin pour m'assurer que les scripts shell que je commets à partir de Windows (où j'ai core.filemodedéfini false) ont réellement le bit d'exécution défini.
tomlogic

Dans mon cas, j'ai également ajouté une nouvelle ligne au fichier, et ce n'est
qu'alors que j'ai

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

N'a plus d'effet, ni dans git bash ni dans l'invite cmd.exe.
Ben

107

À partir d'une autre question ici sur stackoverflow: Comment faire pour que Git ignore les changements de mode de fichier (chmod)?

Essayer:

git config core.filemode false

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

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

3
J'ai eu des problèmes similaires à l'OP et je ne pouvais pas effectuer de modifications, quelle que soit la façon dont hardj'essayais de réinitialiser. Cela a fait l'affaire pour moi.
Jo-Herman Haugholt

11
[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.
Binary Phile

1
Je trouve que cela est également nécessaire sur NTFS, malheureusement.
Marc 2377

1
Voilà la réponse!
Andrew Surdu le

29

One-liner pratique pour Git Bash:

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

Il marquera tous les .shfichiers comme exécutables. Après cela, il vous suffit de le faire git commit.


2
Petite correction pour @ benoit-blanchon one-liner ... le .sh doit être cité. trouver . -nom ' .sh' | xargs git update-index --chmod = + x
Steven le facilement amusé

Vous avez raison, j'ai édité la réponse. Merci @SteventheEasilyAmused.
Benoit Blanchon

15

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 trouvé que je devais faire ce qui suit pour que mon git Cygwin et mon git Windows coexistent bien sur un système de fichiers Windows sans que des changements de mode de fichier inexistants apparaissent tout le temps:

  • supprimer le paramètre de ligne core.filemode dans $ projdir / .git / config
  • dans Windows git, 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.


6

Vérifiez d'abord les autorisations de fichier à l'aide de 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 autorisations.

git fichiers ls --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 pour fonctionner sur une machine Linux

dos2unix nom_script.ext nom_script.ext


N'y a-t-il aucun moyen de faire quelque chose comme git update-index --chmod=1777 'scriptname.ext'?
Barker Alex

Avez-vous navigué jusqu'au chemin, où se trouve le fichier de script? @alex
Sireesh Yarlagadda

5

Je l'ai corrigé en modifiant les autorisations de fichier dans Ubuntu, en validant, en poussant et tout est OK. Il semble que cela ne fonctionnerait tout simplement pas avec msysgit sous Windows / NTFS.


Je recommande GitHub pour Windows. Interface merveilleuse et shell vraiment sympa, j'ai même rendu relativement facile la configuration des clés ssh et l'installation de git flow.
Sangoku
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.