【问题标题】:How to check out a deleted project from an SVN on the command line如何在命令行上从 SVN 签出已删除的项目
【发布时间】:2013-04-08 09:37:19
【问题描述】:

我正在尝试签出一个在 401 修订版中从我的 SVN 中删除的项目。该项目现在已失效,并已完全被代码重写所取代,但我想进行签出,以便我在进行重写时可以参考旧代码的小片段。

据我所知,这应该就像检查旧路径和最后一个好的修订版 (400) 一样简单。但是当我尝试这个时,我得到一个错误,因为它正在尝试使用最新版本:

C:\Users\couling\workspace>svn checkout --revision=400 https://svn.domain.com/repos/trunk/OldProject
Error validating server certificate for 'https://svn.domain.com:443':
 - The certificate is not issued by a trusted authority. Use the
   fingerprint to validate the certificate manually!
Certificate information:
 - Hostname: svn.domain.com
 - Valid: from Tue, 11 Dec 2012 15:03:33 GMT until Wed, 11 Dec 2013 15:03:33 GMT
 - Issuer: Personal Certificate, Foomy Whatsit, Blah, Blah, GB
 - Fingerprint: 01:02:03:04:05:06:07:08:09:10:11:12:13:14:15:16:17:18:19:20
(R)eject, accept (t)emporarily or accept (p)ermanently? t
svn: '/repos/!svn/bc/1418/trunk/OldProject' path not found

C:\Users\couling\workspace>

我可以通过网络浏览器轻松浏览到修订版 400 的文件夹,因此在最坏的情况下我仍然可以查看代码,但我更愿意为我的 IDE 提供所有源文件的副本。

作为参考,我使用的是这个版本的客户端:

C:\Users\couling\workspace>svn --version
svn, version 1.6.16 (r1073529)
   compiled Mar  8 2011, 11:47:41

Copyright (C) 2000-2009 CollabNet.
Subversion is open source software, see http://subversion.apache.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

如何签出现在已删除的文件夹?

编辑

为了消除疑问.... 上面的 checkout 命令使用语法--revision=400,因为这恰好是我在发布之前编写命令的最后一种方式。这是有效的语法,因为 svn 命令使用与 GNU getopt_long 兼容的库。我使用的版本和以下都是同义词-r 400-r400--revision 400--revision=400。不同的变体都被 getopt 库简化为一个结果。

碰巧我在发布之前使用的最后一个命令的原因是我检查了所有变体以确认它与此问题无关。他们都有相同的结果。

【问题讨论】:

标签: windows svn command-line svn-checkout


【解决方案1】:

svn co --depth=infinity https://svn.domain.com/repos/trunk/OldProject@400

"SVNBook | Peg and Operative Revisions"

【讨论】:

  • 是的,这就是我需要的。如果我没看错的话; -r400 告诉 svn 查看给定位置并将其追溯到 rev 400 - 允许重命名。 @400 指定了我需要的 rev 400 中的位置。非常感谢!
  • --revision 400 在这里不起作用而不是 @400 有什么具体原因吗?还是我表示我误解了什么?编辑:哦。 stackoverflow.com/a/15508611/611007
【解决方案2】:
  1. 当您使用 Operative Revision 时,您必须用空格来写它:-r 400
  2. 可以使用 PEG-revision un URL 而不是 OR:https://svn.domain.com/repos/trunk/OldProject@400
  3. 为了在没有用户干预的情况下执行操作(对于证书),您可以添加到命令

... --non-interactive --trust-server-cert

样本

因为 OP 坚持坚持正确而不是 RTFM 并尝试

前提条件:http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Greetings 在当前 HEAD 中不存在,但在 r16 中

svn co -r 16 http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Greetings
svn: E160013: '/svn/Hello/!svn/rvr/37/branches/Greetings' path not found

svn co http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/Greetings@16
A    Greetings\Hello.txt
 U   Greetings
Checked out revision 16.

svn co -r=16 http://mayorat.ursinecorner.ru:8088/svn/Hello/branches/
svn: E205000: Syntax error in revision argument '=16'
  • 根据最后的评论,我必须获得 /branches 的 HEAD,但是

>dir /b

Greetings

【讨论】:

  • 遗憾的是没有。我已经使用了带和不带空格/= 以及长短选项的所有变体。当我检查存在的东西时,这很好用(所以我可以很好地检查父目录)。问题似乎是它首先检查了头部修订。
  • @couling - 只需阅读“SVNBook | Peg and Operative Revisions”。操作修订的格式与您的问题无关:它只是命令选项的格式,并且“=value”形式不存在,因此 - 忽略
  • @Lazey_Badger 我会读的。但是:无效的 SVN 修订版将被从不忽略。它们导致“语法错误”。 (试试这个-r =400 来查看消息)。 svn 基于标准的 Unix “getopt” 参数。我使用的语法是正确的,我一直在使用它。这里的错误只是因为我正在尝试签出已删除的目录;如果我使用 相同的语法检出父目录,它工作得很好。
猜你喜欢
  • 2012-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-16
  • 2014-04-29
  • 2013-07-13
  • 2012-01-07
相关资源
最近更新 更多