Comment faire pour restaurer les autorisations de fichiers et de répertoires à l'intérieur de git s'ils ont été modifiés?
J'ai un git checkout. Toutes les autorisations de fichier sont différents de ce que git pense qu'ils devraient être, par conséquent, ils montrent tous comme modifié.
Sans toucher le contenu des fichiers (veux juste modifier les autorisations) comment puis-je régler tous les fichiers des autorisations à ce que git pense qu'ils devraient être?
InformationsquelleAutor Dale Forester | 2010-03-25
Vous devez vous connecter pour publier un commentaire.
Git garde la trace de filepermission et expose les modifications des autorisations lors de la création de patchs à l'aide
git diff -p
. De sorte que tous nous avons besoin est:Comme un one-liner:
vous pouvez également ajouter un alias à votre git config...
...et vous pouvez les appeler via:
Remarque, si vous le shell est
bash
, assurez-vous d'utiliser'
au lieu de"
des guillemets autour de la!git
, sinon il se substituer à la dernièregit
commande exécutée.Merci à @Mixologic pour indiquer qu'en utilisant simplement
-R
surgit diff
, la lourdeur dessed
de commande n'est plus nécessaire.fatal: unrecognized input
git reset
avant d'appeler la commande aidé 🙂fatal: unrecognized input
message. S'avère que ma couleur les paramètres étaient réglés sur "toujours", qui a causé la couleur d'échappement de caractères à une partie de la sortie, même si la tuyauterie ou l'écriture dans un fichier. En changeant de "toujours" à "auto" a fait le tour.--no-color
à lagit diff
commande?--color=never
option qui fait le truc, alors... cool! De toute façon je pense que "auto" est une meilleure option de couleur pour grep donc je vais rester avec ça. Merci!--color=never
est en fait la bonne grep drapeau, ce n'est pas seulement Gagner/GNU spécifiques. Super!git diff -p
n'a pas toujours un rapport tous les écartsfatal: unrecognized input
- si vous avez déjà mis en scène vos modifications (vous êtes au milieu d'un rebase interactif par exemple prêt à frapper continuer) ajouter--cached
à la commande git diffgit checkout <file>
effectivement fonctionner comme prévu.--no-ext-diff
comme ceci:git diff -p -R --no-color --no-ext-diff \ | grep -E "^(diff|(old|new) mode)" --color=never \ | git apply
git -c core.fileMode=true ...
pour s'assurer qu'ils vont travailler même dans des environnements où les locaux ou globaux options ont désactivé la vérification du fichier de modes.fatal: unrecognized input
, vous pouvez avoir appliquégit config core.fileMode false
qui est suggéré ci-dessous. Vous devez définirgit config core.fileMode true
avant d'exécuter la commande ci-dessus!fatal: unrecognized input
peut également être due àgit diff
pas pour la sortie des résultats, pour moi, c'était parce que j'ai été de tenter de corriger la précédente livraison d'un autre développeur fait. Le résultat final pour la fixation du dernier commit, comme ça sur un macgit diff -p -R --no-color --no-ext-diff HEAD^ HEAD | grep -E "^(diff|(old|new) mode)" --color=never | git apply
REMARQUE: leHEAD^ HEAD
était ce qui me manquait.error: unrecognized input
il se pourrait que stdingit apply
pour appliquer est vide, donc il n'y a pas de modifications des autorisations dans ce repo. Surtout quand récursivement en l'appliquant à des submodules, il peut être utile de remplacergit apply
parifne git apply
à l'aide deifne
demoreutils
manpages.ubuntu.com/manpages/eoan/en/man1/ifne.1.htmlEssayer
git config core.fileMode false
De la
git config
homme page:git checkout origin/master
définit les autorisations de fichier commis sur le serveur de ma copie de travail locale? Car chaque fois que j'construire V8 pour ArangoDB, les autorisations de fichier sont modifiés de sorte que l'accès est refusé à l'ensemble du dossier de création (même avec des droits élevés; Windows 7+ qui est). J'ai besoin de fixer toutes les autorisations des fichiers locaux avant que je puisse continuer le processus de construction. Peutcore.filemode false
résoudre ce problème aussi? Je soupçonne git pour définir les permissions Linux sur ma machine Windows. Les scripts de construction pourrait juste de les préserver et de les appliquer de la même autorisations pour les fichiers nouvellement créés...Git ne stocke pas les autorisations de fichiers autres que des scripts exécutables. Envisagez d'utiliser quelque chose comme git-cache-meta pour enregistrer un fichier de propriété et les autorisations.
Git ne peut stocker que de deux types de modes: 755 (exécutable) et 644 (non exécutable). Si votre fichier a été 444 git magasin il a 644.
umask
ainsi que d'un paramètre de configuration, reportez-vous à stackoverflow.com/a/12735291/125150....a mode of 100644, which means it’s a normal file. Other options are 100755, which means it’s an executable file; and 120000, which specifies a symbolic link. The mode is taken from normal UNIX modes but is much less flexible — these three modes are the only ones that are valid for files (blobs) in Git (although other modes are used for directories and submodules).
fonctionne dans la plupart des cas, mais si vous avez externes diff outils comme fusionner installé, vous devez ajouter l'option --no-ext-diff
était nécessaire dans ma situation
Vous pouvez également essayer de pré/post la caisse crochet pourrait faire l'affaire.
Voir: Personnalisation De Git - Git Crochets
La meilleure chose à faire est de simplement changer les autorisations de retour. Comme @kroger a noté git seulement des pistes exécutable bits. Donc, vous avez probablement juste besoin d'exécuter
chmod -x filename
pour le fixer (ou+x
si c'est ce qui est nécessaire.git show
: diff --git a/OpenWatch/src/org/ale/openwatch/fb/FBUtils.java b/OpenWatch/src/org/ale/openwatch/fb/FBUtils.java l'indice de cd6fa6a..e5b0935 100644 Que peu en gras il y a les autorisations de fichier.100644
à100755
. Je ne pense pas que vous méritez un downvote; Git devez être voté. Il est donc rompu à de nombreux égards à tant de niveaux différents...git diff -p
utilisé dans muhqu réponse ne peut pas montrer tous les écarts.core.filemode
estfalse
(qui est la valeur par défaut pour MSysGit)Ce code lit les métadonnées directement à la place:
Un non-production de qualité one-liner (remplace les masques entièrement):
(Crédit pour "$'\0'" va à http://transnum.blogspot.ru/2008/11/bashs-read-built-in-supports-0-as.html)
La
etckeeper
outil pouvez gérer les autorisations et avec:Vous pouvez l'utiliser pour d'autres répertoires que
/etc
.Installer à l'aide de votre gestionnaire de paquets ou d'obtenir des sources de lien ci-dessus.