SVN: broken pipeline when printing truncated log

At least in svn, version 1.4.4 (r25188), this happens.

$ svn log -v | head -20
After printing a few lines, one error msg pops out.
svn: Write error: Broken pipe

The “broken pipe” msg is related to SIGPIPE, a signal sent usually because there is no reader down the pipe to accept what the printer is trying to write. This seems to be one unfriendly feature/bug in svn which lots of users have complained.

This does not affect the output results though. Just ignore the error msg at this stage.

SVN: broken pipeline when printing truncated log

SVN: restore deleted files

One good thing about subversion(svn) is that it does not only keep track of changes you make, it also offers the flexibility to roll back to previous versions. Restoring deleted files is one extreme case in this sense.

For example I want to recover the file filen.txt at r25.

$ svn update -r 24 file.txt
A file.txt
Updated to revision 24.

This will pull file.txt from the repository down to local working directory, but it will disappear after you do another update.

$ svn update
D file.txt
Updated to revision 25.

One way to avoid this is to use full path name in repository.

$ svn copy -r 56 svn://svn.imager.umro/masdar/trunk/mantis/mantis2_Gechuan/file.txt file.txt
A file.txt
$ svn st
A + file.txt
$ svn commit -m 'recover file.txt'
Adding mantis2_Gechuan/file.txt

Committed revision 26.

Of course there are other more clumsy ways to do this. You can pull down the file from repo using relative path, change it, commit, then change it back, commit. This causes unnecessary log entries and can be confusing as time elapses.

The fourth column is `+' when we do svn st. This item is “scheduled with addition-of-history” according to the svn red book, which means it came with its own history that can be rolled back upon. c.f. here.

The fourth column will only show whitespace or a + which means that the file or directory is scheduled to be added or modified with additional attached history. This typically happens when you svn move or svn copy a file or directory. If you see A +, this means the item is scheduled for addition-with-history. It could be a file, or the root of a copied directory. + means the item is part of a subtree scheduled for addition-with-history, i.e. some parent got copied, and it’s just coming along for the ride. M + means the item is part of a subtree scheduled for addition-with-history, and it has local modifications. When you commit, first the parent will be added-with-history (copied), which means this file will automatically exist in the copy. Then the local modifications will be uploaded into the copy.

In case of wanting to recover a file a long time ago, use
svn log --verbose | grep -A5 -B5 file.txt
to show relevant log parts.

related links:

SVN: restore deleted files