373 votes

Git add seulement non les changements d'espaces

J'ai mon éditeur de texte pour découper automatiquement fuite des espaces lors de l'enregistrement d'un fichier, et que je contribue à un projet OpenSource qui a de graves problèmes avec des espaces.

Chaque fois que j'essaie de remettre un patch, je dois d'abord ignorer tous les espaces uniquement les modifications à la main, de choisir uniquement les informations pertinentes. Non seulement cela, mais quand je le lance en git rebase j'ai l'habitude de courir dans plusieurs problèmes à cause d'eux.

En tant que tel, j'aimerais être en mesure d'ajouter à l'index seulement non les changements d'espaces, de manière similaire, que git add -p , mais sans avoir à décrocher toutes les modifications moi-même.

Personne ne sait comment faire cela?

EDIT: je ne peut pas changer la façon dont le projet fonctionne, et ils ont décidé, après en avoir discuté sur la liste de diffusion, à l'ignorer.

432voto

Colin Hebert Points 40084

@Frew solution n'est pas tout à fait ce dont j'avais besoin, c'est donc l'alias que j'ai fait pour exactement le même problème:

!sh -c 'git diff -w --no-color "$@" | git apply --cached --ignore-whitespace' -

Ou vous pouvez simplement exécuter git diff -w --no-color | git apply --cached --ignore-whitespace

Fondamentalement, il s'applique le patch à appliquer, avec add sans les changements d'espaces. Vous remarquerez que, après une git addnw your/file il y aura toujours des unstaged, c'est les espaces à gauche.

--Non-couleur n'est pas nécessaire, mais comme je l'ai jeu de couleurs pour toujours, je l'ai à l'utiliser. De toute façon, mieux vaut prévenir que guérir.

38voto

Frew Points 3903

Cela fonctionne pour moi:

Si vous voulez garder une cachette autour, cela fonctionne

git stash && git stash apply && git diff -w > foo.patch && git checkout . && git apply foo.patch && rm foo.patch

Je n'aime pas les caches, mais j' ai exécuter dans un bug dans git + cygwin où je perds des changements, afin de vous assurer que les choses sont allés à la reflog au moins j'ai configuré le suivant:

git add . && git commit -am 'tmp' && git reset HEAD^ && git diff -w > foo.patch && git checkout . && git apply foo.patch && rm foo.patch

En gros, nous avons créer un diff qui ne comprennent pas les modifications d'espace, de revenir tous les changements, puis d'appliquer les changements.

7voto

karmakaze Points 4615

Comment est le suivant:

git add `git diff -w --ignore-submodules |grep "^[+][+][+]" |cut -c7-`

La commande à l'intérieur de backquotes obtient les noms de fichiers qui ont non les changements d'espaces.

-2voto

Kevin Vermeer Points 1521

Vous devez d'abord déterminer si la fuite espace est intentionnelle. De nombreux projets, y compris le noyau Linux, Mozilla, Drupal, et Kerberos (pour en nommer quelques-uns à partir de la page de Wikipedia sur le style) à interdire la fuite des espaces. Depuis le noyau Linux documentation:

Avoir un bon éditeur et ne laissez pas les espaces à la fin des lignes.

Dans votre cas, le problème est dans l'autre sens: précédent s'engage (et peut-être) de ne pas suivre cette recommandation.

J'avais parier que personne ne veut vraiment la fin d'espaces, et de régler le problème peut être un changement bienvenu. D'autres utilisateurs peuvent également rencontrer le même problème que vous. Il est également probable que le contributeur(s) qui sont l'ajout de fuite des espaces blancs ne savent pas qu'ils le font.

Plutôt que d'essayer de reconfigurer git d'ignorer le problème ou la désactivation de l'sinon souhaitable fonctionnalité dans votre éditeur de texte, j'avais commencer avec un poste à la liste de diffusion du projet en expliquant le problème. De nombreux éditeurs (et git lui-même) peut être configuré pour traiter avec des espaces.

-2voto

adardesign Points 6182

Vous pouvez utiliser editorconfig.org sur une base par projet voir cet article sur la façon de les mettre en place. http://davidwalsh.name/editor-config

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