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?
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.
Cela indiquera à git d'ignorer les autorisations:
git config core.filemode false
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!