6

假设我有一个从 in 开始的文件,directory1我将文件移动directory2revision 2. Node-copyfrom-rev转储文件中的1. 如何在仅知道文件以前可能在哪里而不确定文件最终会在最新工作副本中的位置的情况下提取文件的内容?

例如,如果我运行

svn cat -r 1 directory1/file.txt,

您将无法找到该文件。你需要执行

svn cat -r 1 directory2/file.txt 

这需要知道工作副本中的文件最后存在于 directory2 中。

4

1 回答 1

10

有两种不同的方式来指定修订:

  1. 使用修订号:svn -r$rev $URL
  2. 使用固定的修订号: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;

就在那里!

于 2013-05-31T03:05:49.647 回答