I've been pleased enough with Subversion + emacs integration that I really haven't yet felt the pull to investigate git and the like. Dealing with branching and merging has been relatively painless, and the whole single-version-number-for-all-files approach seems to work really well for me, too.
The only gotcha I've had is that it's somewhat inconvenient to run a diff (C-x v =) or grab the most recent version (C-x v ~) of a file from within emacs. Emacs trivially lets me know the current version of a file (say, 204), but because files aren't version individually, the previous version of a given file isn't simply the current-version - 1 (that is: version 203 of the file may not be the last time this file was changed, just the last change in the repository). The work around I usually used was to run a quick subversion log (C-x v l), and to note the previous version number.
I knew there had to be a better way, and after a few minutes of searching I discovered it: Subversion Revision Specifiers.
I'd naively assumed that subversion required a version *number* for diff and other operations to work. Turns out, this is just mostly true, there are a few magic version specifiers you can use instead of numbers. The one that fixed my gotcha is PREV. PREV represents exactly what you'd want it to represent:
The revision immediately before the last revision in which an item changed.
From within emacs, I now know I can answer PREV anytime a version number of being asked for. Want to compare a file and the previous version in the repository? No problem, enter PREV for the older version and the HEAD for the current version.
HEAD is also a handy specifier, as I can use it to trivially get a clean copy of a source file out of the repository. I just run: C-x v ~ and enter HEAD.
No comments:
Post a Comment