378 votes

git - comment faire pour récupérer le fichier autorisations git pense que le fichier devrait être ?

J’ai un git checkout. Tous les fichiers, les autorisations sont différentes de celles que git pense qu’ils devraient être donc ils tous apparaître tel que modifié.

Sans toucher le contenu des fichiers (juste vous voulez modifier les autorisations) comment définir toutes les autorisations de fichiers à ce que git pense qu’ils devraient être ?

741voto

muhqu Points 2828

Git permet de suivre de filepermission et expose les modifications des autorisations lors de la création de patchs à l'aide d' git diff -p. De sorte que tous nous avons besoin est:

  1. créer une inversion de patch
  2. inclure uniquement les modifications des autorisations
  3. appliquer le patch pour notre copie de travail

Comme un one-liner:

git diff -p -R \
    | grep -E "^(diff|(old|new) mode)"  \
    | git apply

vous pouvez également ajouter un alias à votre git config...

git config --global --add alias.permission-reset '!git diff -p -R | grep -E "^(diff|(old|new) mode)" | git apply'

...et vous pouvez les appeler via:

git permission-reset

Remarque, si vous le shell est - bash, assurez-vous d'utiliser ' au lieu de " des guillemets autour de la !git, sinon il se substituer au dernier git commande exécutée.

Merci à @Mixologic pour préciser que simplement à l'aide de -R sur git diff, la lourdeur sed de commande n'est plus nécessaire.

185voto

Tim Henigan Points 19948

Essayez git config core.filemode false

De la page de manuel git config :

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

The default is true, except git-clone(1) or git-init(1) will probe and set core.fileMode false if appropriate when the repository is created.

10voto

kroger Points 107

Git ne stocke pas les autorisations de fichiers autres que les scripts exécutables. Envisagez d'utiliser quelque chose comme git-cache-meta pour enregistrer la propriété du fichier et les autorisations.

Git ne peut stocker que deux types de modes: 755 (exécutable) et 644 (non exécutable). Si votre fichier était de 444 git le stockerait en 644.

0voto

Doug Points 11

Vous pourriez également essayer un crochet avant / après le paiement pourrait faire l'affaire.

-2voto

Pat Notz Points 46841

Le plus simple est de modifier les autorisations. Comme @kroger l'a noté, git ne fait que suivre les bits exécutables. Vous devez donc simplement exécuter chmod -x filename pour le corriger (ou +x si c'est ce qui est nécessaire).

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