这可能有点尴尬,但我会尝试解释我想要实现的目标以及我遇到了什么问题。首先:这是怎么回事?
我目前正在尝试设置一个分布式工作环境来开发网页。我的计划是设置一个 SVN 存储库用于版本控制、一个托管实际实时页面的实时服务器和一个我可以在该页面上工作的开发服务器。为了方便起见,我打算不在磁盘上保留项目的本地副本,而是直接在开发服务器托管的文件上工作。为此,我在 devserver.com/workspace 下设置了一个 WebDAV 目录,该目录实际上映射到 devserver.com/ 下提供的文件。因此,我可以连接到 devserver.com/workspace,进行某些更改并在 devserver.com/ 上实时查看结果。到目前为止,这很完美。下一步是创建一个 SVN 存储库来负责我的版本控制。我打算能够从我的开发服务器签入存储库,并在任何时候使用一个小的 shell 脚本,通过将修订副本签出到实时服务器目录中,将 svn 中的任何修订部署到实时服务器。第二部分,签出到实时服务器,也运行良好。但问题出现在第一部分:
我的工作站是 Windows 7 机器。我使用 Windows 内置的 WebDAV 支持连接到 WebDAV 共享,效果非常好。我可以从 Windows 机器完美地创建、移动、删除、编辑 WebDAV 共享上的任何文件。下一步是从 SVN(实际上托管在 devserver.com/subversion/)签出工作副本到 WebDAV 共享。在第一次尝试中,我使用了 Eclipse 插件 subversive。实际签出工作正常,我可以更新和提交内容到存储库,但是,我无法将任何文件添加到忽略列表。它总是给我一个错误。所以我尝试使用 TortoiseSVN 对一个全新的存储库进行同样的操作 - 但再次失败并出现相同的错误。这是尝试将文件添加到 svnignore 时显示的内容:
Some of selected resources were not added to ignore.
svn: Cannot rename file '\\devserver.com@SSL\DavWWWRoot\workspace\.svn\tmp\dir-props.66fd8936-2701-0010-bb76-472f0b56a5d1.tmp' to '\\devserver.com@SSL\DavWWWRoot\workspace\.svn\tmp\dir-props'
当我尝试将文件添加到 svnignore 时,apache2 告诉我以下内容:
[Sun Mar 07 03:54:19 2010] [error] [client xxx.xxx.xxx.xxx] Negotiation: discovered file(s) matching request: /var/www/devserver.com/.svn/tmp/dir-props (None could be negotiated).
[Sun Mar 07 03:54:31 2010] [error] [client xxx.xxx.xxx.xxx] (20)Not a directory: The URL contains extraneous path components. The resource could not be identified. [400, #0]
实际上,这两条消息都重复了好几次。第一条消息首先出现,重复了大约 5 次,第二条消息随后出现,重复次数可能超过 20 次。如果我创建一个常规文件,删除、重命名或修改它,这些消息都不会出现在我的 error.log 中
在写这个问题的时候,我能够使用 TortoiseSVN 将文件添加到 svnignore。但是,此后,Eclipse 不再允许我提交。以前在将文件添加到 svnignore 时弹出的错误现在也会在提交时出现。
在搜索网络时,我发现有些人也遇到了同样的问题,因为他们的文件只是大小写名称不同。我检查了我的存储库,没有找到这样的文件。我还读到有人在使用 WebDAV 和文件锁定时遇到麻烦,因为 WebDAV 的文件锁定功能似乎非常有限。在某个阶段,我收到错误消息,告诉我我的存储库已被锁定,因此无法完成操作。不过,自从我设置了一个全新的存储库和工作副本后,这个错误就不再出现了。
如果有人能帮我解决这个问题,我将不胜感激!如果还有其他问题,请随时提问。我知道这是一个有点不寻常的设置。
谨致问候,丹尼尔
答案1
据我所知,没有通用的 webdav 到驱动器映射可以让文件系统很好地用作 subversion 工作副本。
Subversion 要求文件系统能够完全像本地文件系统一样运行,否则其管理区域管理将无法工作。