假设我有一个以directory1
开头的文件,我将文件移至directory2
中的revision 2
。转储文件中的Node-copyfrom-rev
为1
。如何根据以前可能无法确定最终工作副本的最终位置来提取文件的内容?
例如,如果我运行
svn cat -r 1 directory1/file.txt
,
您将无法找到该文件。你需要执行
svn cat -r 1 directory2/file.txt
需要知道工作副本中的文件最后存在于directory2中。
答案 0 :(得分:7)
指定修订版有两种不同的方法:
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
------------------------------------------------------------------------
$
您可以看到我的存储库的修订版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
#! /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;
有它!