【问题标题】:Idiots guide to moving a directory up in SVN在 SVN 中向上移动目录的白痴指南
【发布时间】:2010-01-21 12:20:47
【问题描述】:

不,这不是 this 的副本。

虽然我通常习惯于在 SVN 中使用可视化工具,但我发现自己现在面临着将 Repo/Parent/ChildX/ChildY 移动到 Repo/ChildY 的问题。我收到以下错误,我只是在寻找我在这里缺少的东西。考虑刚刚安装的服务器(来自转储),除了 svn 没有其他可用的。

> svn 结帐 https://localhost/Repo svn: 'https://localhost/Repo'的选项: 200 OK (https://localhost) > svn move Repo/Parent/ChildX/ChildY Repo/ChildY svn:“回购”不是工作副本 svn:“回购”不存在 > svn 移动父新父 svn:'。'不是工作目录 > svn move https://localhost/Repo/Parent NewParent svn:不支持在工作副本和存储库之间移动 > svn move https://localhost/Repo/Parent https://localhost/Repo/NewParent svn: 'https://localhost/Repo'的选项: 200 OK (https://localhost) > svn commit --message "试图让移动命令工作" svn: 'C:\SVNTest' 不是工作副本

我觉得有点奇怪,第一个命令(结帐)对我放在“回购”后面的任何东西给出了相同的响应,比如https://localhost/Repo/SomeNonExistingName。我确定我错过了一些东西。我发现参考资料说您不需要工作副本来进行移动,但是,我该如何进行移动?

上面的命令,无论是错误还是正常,都没有实际移动。我使用VisualSVN Server,可以在线浏览repo。


解决方案

下面接受的解决方案和其他答案有助于解决此问题。对上面第一个命令的响应等于来自任何 Apache 服务器的常规响应。 200 OK 是 HTTP 响应。

使用 VisualSVN Server 时,默认安装在https://hostname/svn。要签出,您需要在存储库名称前加上该路径的前缀。上面的第一个命令应该是:

> svn checkout https://localhost/svn/Repo
文件 1
文件2
ETC...
修订版 XXX

不幸的是,这个小问题,无论多么微不足道,都没有在任何地方提及。结帐后,从同一目录中,移动变得微不足道:

> svn move 文件夹/子文件夹 NewFolder

【问题讨论】:

  • 在我看来,您的结帐失败了 - 如果不起作用,所有其他命令都将毫无意义。
  • @Neil 我如何检查我的结帐是否失败,和/或如何使它工作? Checkout 的预期响应应该是什么?
  • 进入 Repo 目录并环顾四周。验证它是否存在,并且它下面有一个.svn 目录。验证文件结构是否符合您的预期。
  • 我看到您解决了结帐问题。假设其他一切正常,请将该解决方案添加到您的原始问题中,以供未来遇到类似问题的人使用。
  • 我在想这样的事情。我会的:)

标签: svn command-line visualsvn-server


【解决方案1】:

假设您有一个有效的结帐,最简单的方法是这样的(将 REPO_URL 替换为正确的 URL):

svn co REPO_URL
cd Repo
svn mv Parent/ChildX/ChildY .
svn commit -m "moved directory"

当然,这假设您没有标准的主干/标签/分支目录。

这让我想到了您必须回答的问题:签出的工作目录是什么样的?它是否具有您期望的结构,或者它可能有一些您不知道的目录?你在 Repo 下看到 .svn 目录了吗?


编辑:我从未使用过 Visual SVN 服务器,但如果您的存储库位于可访问的文件系统上,则始终可以使用“文件”URL:

svn co 'file:///localhost/Repo'

或者(在刚刚查看 VisualSVN 所谓的“文档”之后),我建议通过 Visual SVN 检查您的工作目录,然后执行上述命令。

另外,Visual SVN 似乎创建了 trunk/tags/branches 目录,所以您肯定想要 cd 进入工作目录并在那里运行您的命令,一旦您验证目录结构.

【讨论】:

  • 是的,您可以要求 VisualSVN 创建默认目录,但我没有。问题是,“工作目录”不是 SVN 中内容的副本吗?我似乎无法获得该工作目录。在执行file:/// 技巧时,我收到 svn: Unable to open an ra_local session to URL
  • 好的,我知道了!我认为 Idiot 放在标题中非常合适。默认的 Visual SVN 安装侦听 https://hostname/svn。任何东西(repo 名称)都必须以它为前缀。所以,svn checkout https://localhost/svn/Repo 工作正常。它要求我的登录密码,这是以前没有的。
  • 从技术上讲,工作副本是存储库某些部分的视图。通常,如果您检查存储库的根目录,您会得到该根目录下的所有内容,其中包括所有标签和分支。使用可视化工具时,VisualSVN 似乎隐藏了所有这些。所以最好使用可视化工具来获取你的工作目录,然后从那里使用命令行工具(我假设可视化工具不能自己移动?)
  • 也许可以,但我正在准备一个禁止安装 Visual Studio 的新服务器。那里只能使用 SVN 服务器。在等待另一家必须打开某些端口的公司时,我只能使用命令行。所以:我正在使用 VisualSVN Server,而不是客户端(还)。 SVN 在 Apache 下运行,而不是从根目录运行,它(显然)从/svn/ 运行。所有存储库都必须以 /svn/ 为前缀才能正常工作。
  • 所有 cmets 都帮助找到了一个解决方案,接受这个,希望没关系 :)
【解决方案2】:

在我看来,您的结帐失败了。

如果成功,您通常会得到一个签出文件列表,后跟“签出修订版 XXXXX”这一行。

this thread 的一些建议可能会有所帮助。特别是,您可能没有为 https 访问正确设置 svn 服务器。一旦你修复它,你应该能够按照你链接的线程中的说明进行操作。

如果摆弄“svn checkout”行不能解决问题,请更新/评论/回复。

【讨论】:

  • 我确实没有收到“已签出修订版 XXX”。我相信 HTTPS 设置正确(添加了 SSL 证书等):我可以正常浏览。那么 checkout 命令有什么问题呢?...
  • 错误(几乎)等于所引用线程中的错误。正如问题中提到的那样。 svn 命令行是否可能不支持 HTTPS?它第一次询问我是否应该永久接受 SSL 证书,我做到了。之后,只有OPTIONS 作为答案...
  • @Abel 如果您执行“svn --version”,它应该列出它支持的各种访问方法和协议。
  • 回想起来,之所以给出如此奇怪的答案,是因为它是 Apache 的正常答案。让我站错了脚的是“200 OK”的响应结束。但这就是服务器给出的答案。感谢您的帮助。
  • 一般情况下,你应该可以在SVN命令行上使用https。如果你输入 svn list https://localhost/Repo 会发生什么?
【解决方案3】:

响应您的评论,结帐应该是什么样子,这是我自己的一个项目结帐的尾巴:

一个 dblite\tags\pre-codeblocks\src\sqlite3.h 一个 dblite\tags\pre-codeblocks\inc 一个 dblite\tags\pre-codeblocks\inc\dblite.h 签出第 31 版。

当然,t 应该创建目录结构,而您的似乎没有这样做。

【讨论】:

  • 确实不是。如何解决?另请参阅 Arkaaito 下的评论。
猜你喜欢
  • 1970-01-01
  • 2011-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2022-11-16
相关资源
最近更新 更多