有两种不同的指定版本的方法:
- 使用版本号:
svn -r$rev $URL
- 使用“固定”的版本号:
svn $URL@$rev
可以将第一种方法(普通版本号)看作是获取一个文件的版本,而第二种方法(“固定”版本号)则是获取目录的版本号。
例如,在版本10中,我执行了以下操作:
$ svn co $REPO/trunk/foo
A foo/foo.txt
A foo/bar.txt
$ cd foo
$ svn delete bar.txt
$ svn commit -m"Removed bar.txt in revision 10"
committed revision 11
现在,已经是第20个版本了,我意识到需要查看bar.txt
的内容。如果我执行以下操作:
$ svn cat -r10 $REPO/trunk/foo/bar.txt
由于我的存储库 /trunk/foo/bar.txt
中不再有该元素,所以我会收到一个错误。我需要做的是回到版本10中的存储库结构。我可以通过在URL上“固定”版本10来实现:
$ svn cat -r10 $REPO/trunk/foo/bar.txt@10
这将会在仓库的第10个版本中,给我提供bar.txt
文件的内容。
实际示例
让我们来看一下我的日志:
$ svn log -v -r161077 $REPO/trunk/Tools/server_tools/
------------------------------------------------------------------------
r161077 | dweintraub | 2013-05-23 17:02:03 -0400 (Thu, 23 May 2013) | 1 line
Changed paths:
D /trunk/Tools/server_tools/jdescribe.pl
Deleting -- in wrong repository
------------------------------------------------------------------------
$
你可以看到,在我的代码库的第161077个版本中,
jdescribe.pl
已被删除。因此,如果我想要它,我需要查看第161076个版本:
如果我这样做:
$ svn ls -r161076 $REPO/trunk/Tools/server_tools
find-required-jars.pl
jdescribe.pl
jenkins-bin/
这就是在第161076版的目录中:
让我们把jdescribe.pl
连接起来:
$ svn cat -r161076 $REPO/trunk/Tools/server_tools/jdescribe.pl
svn: warning: W160013: '/svn/TravelClickPD/!svn/rvr/161264/trunk/Tools/server_tools/jdescribe.pl' path not found
svn: E200009: Could not cat all targets because some targets don't exist
svn: E200009: Illegal target for the requested operation
$
没有生效。当前目录下没有jdescribe.pl
文件。
让我们添加固定版本:
$ svn cat -r161076 $REPO/trunk/Tools/server_tools/jdescribe.pl@161076 | head
use 5.12.0;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use Pod::Usage;
use Getopt::Long;
就是那里!