有两种不同的方式来指定修订:
- 使用修订号:
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 中的存储库结构。我可以通过将版本 10 固定到 URL 上来做到这一点:
$ svn cat -r10 $REPO/trunk/foo/bar.txt@10
这将为我提供版本 10 的内容,bar.txt
因为它存在于版本 10 的存储库中。
现实生活中的例子
让我们看看我的日志:
$ 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
------------------------------------------------------------------------
$
您可以看到它jdescribe.pl
在我的存储库的修订版 161077 中被删除。因此,如果我想要它,我需要查看修订版 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
#! /usr/bin/env perl
# description.pl
use 5.12.0;
use warnings;
use LWP::UserAgent;
use HTTP::Request::Common qw(POST);
use Pod::Usage;
use Getopt::Long;
就在那里!