可以强制 SVN 将目录视为工作副本吗?

Posted

技术标签:

【中文标题】可以强制 SVN 将目录视为工作副本吗?【英文标题】:Possible to force SVN to consider a directory a working copy? 【发布时间】:2015-04-28 17:03:23 【问题描述】:

我正在尝试解决this puzzle,我开始认为问题不在于 SVN 客户端无法解析存储库的路径,而是存储库不是工作副本。

原始问题摘要:我正在从 Ubuntu VM 上的旧 Bitnami Trac Stack 迁移到当前本机 Windows Bitnami Trac Stack在同一台服务器上。我使用了来自 Ubuntu SVN 存储库的 hotcopy 备份,所以理论上它们与那些“无法区分”。

但是,我无法在 TortoiseSVN 等外部客户端中查看新的 SVN 存储库,但我可以在 Trac 中查看存储库。我在命令行运行的任何命令都告诉我,我正在尝试使用的存储库“不是工作副本”。

如果我将 TortoiseSVN 指向//sbeut01:8001/svn/RnD(理论上这是一个有效的存储库),它会优雅地出错://sbeut01:8001/svn/RnD is not a working copy

如何在 Windows Trac/subversion 实例工作副本上创建存储库?或者这似乎是与我上面提到的原始问题相反的实际问题?

SO Question that didn't resolve the problem

编辑:我想我会尝试使用 Windows Trac/subversion 实例创建一个全新的存储库,然后看看我是否能看到 来自远程 svn 客户端甚至本地副本的那个实例。但是,如果我尝试执行svn mkdir c:\test,我会得到同样的错误c:\test is not a working copy。我不知道该怎么做。我也尝试对svnadmin create c:\test 做同样的事情,结果相同。

第二次编辑原来确实有一个工作副本,我只是找错地方了。最终的正确答案是:

svn://[IP address]:3691/Bitnami/Repos/RnD

8001 是 Trac 用于查看支持 Web 的存储库版本的 Apache 端口,3691 是我第一次设置 Windows Bitnami Trac 堆栈时的 SVN 端口

【问题讨论】:

这里的术语可能混淆了。您是否将工作副本(运行svn checkout 的结果)与存储库在磁盘上的文件位置(运行svnadmin create 的结果)混淆了? 我通过运行:c:\bitnami\trac - 1.0.5-0\subversion\bin\hotcopy [path to un-tarred hotcopy backups from Ubuntu] [path to new repository] 创建了存储库。我对 hotcopy 的理解是应该在新目录中创建一个新的工作副本。这回答了你的问题吗? hotcopy 复制 repository(即存储在服务器上的内容);它不会创建工作副本(即存储在所有客户端上的内容)。我对你的问题了解不多,我只是想确保你的术语是正确的,因为它真的很重要。 我想知道您为什么要问这个新问题,尽管您已经在这里问过:***.com/questions/29907387/…。此外,不清楚您的 Tortoise 应该在服务器或客户端计算机上运行的位置,因为它对远程客户端计算机确实有意义,但是为了使您需要通过 Apache 网络服务器将您的存储库映射到网络 URL,如我的提到了其他 SO 问题。 【参考方案1】:

认为我知道发生了什么,而且似乎一切正常,只是你的一方有一点误解。

使用 Tortoise,打开 Repository Browser 并输入您的存储库位置,但保留 http 协议标识符,即 http://sbeut01:8001/svn/RnD。假设一切都设置正确,这听起来像是因为你说 Trac 可以在那里看到它,你会看到你的存储库,正如你所期望的那样。

我相信,您遇到的问题只是对 Tortoise 和 SVN 的一般工作方式的误解。 Tortoise 可以与存储库(在服务器上)和工作副本(在客户端)进行通信。 Tortoise 操作与哪个通信并不总是很明显,并且没有经验或不知道“工作副本”和“存储库”是very precise terms,我可以(并且确实)看到混乱来自哪里。

【讨论】:

感谢您的帮助,我绝不是 SVN 专家,我只是被选中进行迁移的人,所以我边走边学。如果我尝试将 TortoiseSVN 指向http://sbeut01:8001/trac/RnD//trac/RnD/ 我会得到一个 Trac 网站目录列表(并且没有警告),但是如果我单击向下箭头转到 \browser 位置(Trac 查看存储库的同一位置),我收到Unable to connect to a repository at... 错误 这与您在上面发布的网址不同。 http://sbeut01:8001/trac/RnD 路径听起来像是提供 Trac 的位置,您可以将 Web 浏览器指向它。 http://sbeut01:8001/svn/RnD 路径听起来像是提供 SVN 的地方,您应该将 Tortoise 存储库浏览器指向它。 如果我指向http://sbeut01:8001/svn/RnD乌龟警告:Unexpected HTTP status 405 "Method Not Allowed" on '/svn/RnD'Additional errors: PROPFIND request on '/svn/RnD' failed: 405 Method Not Allowed 那么我们只是没有指向您的存储库的正确 URL。既然您说可以在 Trac 中查看存储库,那么您配置 Trac 使用哪个 URL 来访问 SVN?你应该可以给 Tortoise 相同的 URL。 @delliottg:你需要了解 Trac、SVN repo、Tortoise 客户端和 Apache 之间的关系。 SVN repos 允许通过 Apache 和 Trac 用于访问的 subversion 服务器管理工​​具进行访问。 Apache 通过 Web DAV 协议将其映射到网络,以便您可以通过 Tortoise 从远程客户端计算机访问 SVN 服务器及其存储库(例如 svn checkout)。 Tortoise 从中创建一个工作副本,它还可以访问本地命令的工作副本(例如本地差异)。客户端工作副本和 svn 服务器及其 repos 可能在同一台机器上。

以上是关于可以强制 SVN 将目录视为工作副本吗?的主要内容,如果未能解决你的问题,请参考以下文章

SVN更新后恢复已删除的目录

在颠覆工作副本中重命名目录的明智方法

svn,导入数据到版本库及使用工作副本

Xcode“项目”与“项目”,删除与 SVN 工作副本的关联

SVN反向合并?

关于SVN先还原在更新是啥意思?新手,请指导。