2010-07-20 7 views
52

Je modifie les autorisations de l'intégralité de mon arborescence et je valide ce changement seul avec d'autres modifications de contenu.Puis-je faire en sorte que git diff ignore les modifications d'autorisation?

J'utilise quelque chose comme:

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

pour générer un goudron avec les fichiers modifiés entre deux balises, le problème est que maintenant en raison des autorisations changent 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 qui ont seulement les permissions changées?

+3

duplication possible de [Comment modifier les changements de mode git ignorer (chmod)?] (Http://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-mode-changes-chmod – Leonel

Répondre

115

Cela indiquera git d'ignorer les autorisations:

git config core.filemode false 
+2

Peut-être que cela pourrait empêcher l'ajout de fichiers avec des autorisations modifiées à un commit, mais dans mon cas, les fichiers sont validés, poussés et étiquetés, et la commande que vous proposez ne m'aide pas. Je suppose que je vais devoir faire un script bash pour analyser la sortie de git diff pour supprimer les lignes sur les changements de mode, et envoyer le résultat à tar. Toutes les idées sont plus que bienvenues – Cesar

+0

@Cesar: La commande dit à git d'ignorer les différences de permissions entre l'index et la copie de travail. N'est-ce pas ce que tu veux? –

+0

Je suis nouveau à git, mais le fait est que les différences sont entre les commits. Quand je fais git diff tag1 tag2, il montre tous les fichiers auxquels j'ai changé les permissions en plus des fichiers avec le contenu modifié, je veux juste trouver un moyen d'ignorer tous ces 'changement de mode 664 => 775', j'espère que j'ai fait moi-même clair – Cesar

9

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

La réponse a été d'utiliser la commande (big scary) filter-branch. tout ce que vous devez saisir, en particulier, est:

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

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 devriez réessayer.

Profitez-en!

+1

Intéressant (+1). Je l'ai inclus dans ma réponse à http://stackoverflow.com/a/12979453/6309 (puisque votre propre réponse a été supprimée) – VonC