web-dev-qa-db-fra.com

Puis-je faire git diff ignorer les changements de permission

Je modifie par inadvertance les autorisations de l'ensemble de mon arborescence et valide ce changement seul avec d'autres modifications de contenu.

J'utilise quelque chose comme:

tar -czf deploy.tar git diff --name-only v1 v2

pour générer un tar avec les fichiers modifiés entre deux balises, le problème est que maintenant, en raison des modifications des autorisations, presque tout mon arbre est répertorié comme modifié.

Y a-t-il un moyen que je pourrais dire git diff pour ignorer les fichiers dont seules les autorisations ont été modifiées?

61
Cesar

C'est une vieille question, et la réponse est déjà dans les commentaires mais:

Utilisez le -G<regex> option ("Rechercher les différences dont le texte du correctif contient des lignes ajoutées/supprimées qui correspondent à <regex>. ") recherche de toute modification - c'est-à-dire .. Les modifications des autorisations uniquement ne correspondent pas à cela, elles sont donc ignorées.

Donc: git diff -G.

7
lazysoundsystem

Cela indiquera à git d'ignorer les autorisations:

git config core.filemode false
143
Daniel Stutzbach

J'ai eu ce problème après avoir supprimé intentionnellement l'autorisation d'exécution des fichiers de code source (~ 26K fichiers). Ensuite, git diff dit que tous les fichiers ont changé! La réponse avec core.filemode ne m'aide pas car cela n'affecte que les diffs contre votre répertoire de travail, pas les diffs contre 2 commits dans le repo.

La réponse a été d'utiliser la commande (grande effrayante) de branche de filtre. En particulier, il vous suffit de taper:

git filter-branch -f --tree-filter 'find * -type f | xargs chmod 644 ' -- --all

à partir de la racine de votre répertoire de travail. Bien sûr, assurez-vous de faire une copie de votre repo en premier (cp -pr ~/repo.git ~/repo-orig.git ou similaire), au cas où vous auriez besoin de réessayer.

Prendre plaisir!

10
Alan Thompson