views:

305

answers:

3

When I use 'svn diff' from the command line, it prints out the lines that have changed but also the 3 unchanged lines before and after for context. I much prefer seeing only the changed lines with no context. I haven't been able to determine any command line options that will let me make it behave this way. Standard 'diff' and 'cvs diff' do what I want by default. Surely 'svn diff' can do this but I'm missing something. Anyone know how?

+1  A: 

This thread seems to come to the conclusion that you should use an external diff command in order to control the amount of context.

I prefer unified diffs, so my fingers always type

svn diff -x -u

Which implies that an external (GNU diff) command is used, I think.

unwind
Thanks for the useful link. Surprising to me that the built-in diff can't do what I want. Seems to me to violate the Unix principle of having the least output asked for.Using the -x -u commands gives me the same results as not. 'svn help diff' tell me that those are the defaults. Maybe you don't need to type the extra char's after all?
DaveBurns
+1  A: 

You could pipe the results of 'svn diff' to grep and write a regular expression to get what you want. For example, try this:

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

The above command gets you all lines that begin with a '+' or a '-' or a '\'. (You need the '\' if you want to see differences such as "\ No newline at the end of the file".)

Babak Ghahremanpour
+2  A: 

After looking into the useful link given above by unwind, the short answer is that svn's built-in diff can't do what I want. You can tell it to use the standard external diff though and pass arg's to that to tell it that you want no context. I put the following alias in my .bashrc and all now works well if I use that instead:

alias svndiff='svn diff --diff-cmd=diff -x -U0'
DaveBurns