4

我在 1.01 中有我们所有的代码。我最近将它重命名为trunk。现在我无法获得重命名之前的旧版本。重命名发生在修订版 6090,但我想要文件的修订版 5876。我可以看到日志,但无法导出它说的文件url /var/www/project/trunk/file doesn't exists

我怎样才能得到那个版本的文件

我跑了svn export -r 5876 https://url/project/1.01/file

4

4 回答 4

6

尽管提供的答案是正确的,但对于可能偶然发现此问题的任何人来说,这是一些重要的建议:

SVN EXPORT 有两种语法,它们做不同的事情:

许多人在应该使用第 2 种语法时使用第一种语法

1. svn export -r 123 svn://rep/file1.txt

which is shorthand for: svn export -r 123 svn://rep/file1.txt@HEAD

这个命令会做什么?它将首先在当前 HEAD-revision 中搜索名为“file1.txt”的文件。一旦找到,搜索该文件的过去修订并获取修订 123 的文件内容。因此,如果修订 123 中的文件原始名称是 file.txt,后来重命名为 file1.txt(例如,在修订 133 ) 您将获得修订版 123 中原始文件 file.txt 的内容。

现在为第二种语法:

2. svn export svn://rep/file1.txt@123

which is shorthand for: svn export -r 123 svn://rep/file1.txt@123

该命令告诉 SVN 在 Revision 123 中搜索一个名为 file1.txt 的文件,而不关心任何其他版本中的不同文件名。因此,如果修订版 123 中的文件原始名称为“file1.txt”,后来重命名为“file2.txt”,此命令仍会为您提供修订版 123 中原始 file1.txt 的内容

总结:

仅当您想为文件名和文件内容提供单独的修订时,才使用 -r 标志。仅当您的请求是“SVN 提供修订版 123 中的文件内容时才会出现这种情况,该文件现在称为 'File1.txt',无论它当时被称为什么......”

于 2014-03-19T12:11:23.343 回答
2

我宁愿建议您执行以下任一操作,而不是接受的答案,因为您会丢失历史记录,而您很可能想要找回这些历史记录。

恢复到工作副本

svn cp FILE_URL@REV local_path_to_file

这将直接获取您需要的修订版,并在您的本地工作副本中为您重新添加和重新更新文件。

然后,您可以提交文件文件以将其放回远程存储库。

恢复到存储库

svn cp FILE_URL@REV FILE_URL

这将目录复制旧文件并将其放回 HEAD,其中包含历史记录和所有内容。


显然,您可以跨分支机构执行此操作,等等...

于 2013-04-29T18:14:14.343 回答
0

你有没有尝试过

 svn cat TARGET@5876 > /var/www/project/trunk/new/path/to/file

然后重新添加到svn。

目标应该是重命名之前的旧回购路径。

于 2012-06-14T08:32:07.943 回答
-1

你是如何“重命名”主干文件夹的?使用“svn rename”或“svn move”?通常如果使用这些命令,历史记录应该是一致的,并且在使用“svn export -r ...”命令时文件应该可用。

“项目”文件夹是否也在版本控制之下?如果是,我会尝试将工作副本更新为旧版本并将其复制到现在应该位于的位置。

导出命令是否有可能依赖于获取在要导出的修订时正确的路径?

当您将工作副本更新到旧版本时会发生什么,resp。如果您重新检查所需的旧版本?

于 2012-06-14T08:27:04.560 回答