2009-10-16 7 views
13

Lorsque j'utilise 'svn diff' depuis la ligne de commande, il imprime les lignes qui ont changé mais aussi les 3 lignes inchangées avant et après pour le contexte. Je préfère de loin voir seulement les lignes changées sans contexte. Je n'ai pas été en mesure de déterminer les options de ligne de commande qui me permettent de le faire se comporter de cette façon. Standard 'diff' et 'cvs diff' font ce que je veux par défaut. Sûrement 'svn diff' peut le faire mais il me manque quelque chose. Quelqu'un sait comment?Comment ne pas avoir de contexte lors de l'utilisation svn diff

Répondre

17

Après avoir regardé le lien utile donné ci-dessus par la décompression, la réponse courte est que SVN est construit -diff ne peut pas faire ce que je veux. Vous pouvez lui dire d'utiliser la différence externe standard et lui passer des arguments pour lui dire que vous ne voulez pas de contexte. Je mets l'alias suivant dans mon .bashrc et tout fonctionne maintenant bien si j'utiliser à la place:

alias svndiff='svn diff --diff-cmd=diff -x -U0' 
+2

'-x' est le paramètre d'extension de' svn diff', cela provoque le jeton suivant immédiatement, ici '-U0', être passé à la commande diff spécifiée avec '--diff-cmd', ici' diff'. – valid

2

This thread semble arriver à la conclusion que vous devriez utiliser une commande diff externe afin de contrôler la quantité de contexte. commande

Je préfère diffs unifié, donc mes doigts tapez toujours

svn diff -x -u 

Ce qui implique qu'un externe (GNU diff) est utilisé, je pense.

+0

Merci pour le lien utile. Surprenant pour moi que le diff intégré ne peut pas faire ce que je veux. Il me semble violer le principe Unix d'avoir le moins de résultats demandés. L'utilisation des commandes -x -u me donne les mêmes résultats que non. 'svn help diff' dis moi que ce sont les défauts. Peut-être que vous n'avez pas besoin de taper le caractère supplémentaire après tout? – DaveBurns

3

Vous pouvez rediriger les résultats de 'svn diff' vers grep et écrire une expression régulière pour obtenir ce que vous voulez. Par exemple, essayez ceci:

svn diff | grep "^[+-\]" 

La commande ci-dessus vous obtient toutes les lignes qui commencent par un « + » ou « - » ou un « \ ». (Vous avez besoin de '\' si vous voulez voir des différences telles que "\ Pas de nouvelle ligne à la fin du fichier".)

+0

Cela fonctionne très bien si vous ne voulez que les lignes modifiées. Cependant, il ne parvient pas à fournir des informations correctes sur les numéros de ligne. Par exemple. avec 3 lignes de contexte avant/après, "@@ -21,7 +21,7 @@" indique que la ligne 24 a été modifiée. Sans contexte vous verrez "@@ -24,1 +24,1 @@" – kamczak

4

La suggestion ci-dessus produit encore le format de contexte, mais avec 0 lignes de contexte. Ce n'est toujours pas la sortie diff traditionnelle d'avant subversion.

Ce qui fonctionne pour moi est: svn di --diff-cmd=diff -x --normal

L'option --normal (dans le diff livré avec Mac OS X) donne le format traditionnel que certaines personnes préfèrent.