获得;can';“无法获得文件的独占锁定”;在windows上从mac提交到存储库时

获得;can';“无法获得文件的独占锁定”;在windows上从mac提交到存储库时,windows,macos,svn,version-control,Windows,Macos,Svn,Version Control,我所要做的就是在mac和windows机器之间建立一个共享存储库。存储库位于windows计算机上,我有一个家庭组与mac共享它。将项目更新到Mac是可行的,但从Mac提交则不行,因为它会导致错误 svn: E000045: Commit failed (details follow): svn: E000045: Can't get exclusive lock on file '/Volumes/[reponame]/db/txn-current-lock': Operation not s

我所要做的就是在mac和windows机器之间建立一个共享存储库。存储库位于windows计算机上,我有一个家庭组与mac共享它。将项目更新到Mac是可行的,但从Mac提交则不行,因为它会导致错误

svn: E000045: Commit failed (details follow):
svn: E000045: Can't get exclusive lock on file '/Volumes/[reponame]/db/txn-current-lock': Operation not supported
那么问题是它不能确保没有其他人篡改该文件吗

现在有人可能会评论说,共享这样的文件夹不是正确的方式,可能会导致问题。但是我的使用仅限于在这两台计算机之间共享,所以我只需要一个简单的解决方案


所以我的问题是:是不可能让锁工作,还是让svn忽略锁需求?如果是这样,我该怎么做呢?

@Ben是对的:Subversion存储库可以存储在网络磁盘上,但它需要特定的锁定功能。当共享文件夹存储在Windows计算机中时,Mac计算机似乎不支持它


在Windows上安装Subversion server非常简单:只需下载安装包并单击“下一步”几次。安装Subversion后,可以使用http://protocol访问Subversion存储库。

这听起来像是在使用
文件://
协议。不要。该协议适用于非常非常特殊的情况。如果在用户之间或计算机之间共享存储库,则无法使用它

改用
svnserve
或Apache
httpd
服务器。在线Subversion一书的第1部分解释了如何设置这些设置

svn服务
快速简单。您可能可以在几分钟内设置
svnserve
过程。甚至还有将
svnserve
设置为。这意味着,只要打开Windows计算机,您的存储库就可用,您可以在Mac上进行签出。唯一的缺点是网络或防火墙可能会过滤掉默认情况下由
svnserve
使用的端口3690。(这是可以更改的,但您必须确保您的客户端知道正确的端口号)

您还可以使用类似的工具来设置Apache
httpd
,并为您配置subversion模块。它是GUI设置,默认情况下使用端口80,通常不会被阻止

您唯一应该使用
file://
的时间是您第一次使用Subversion来学习它时,或者对于一些允许您查看(但不修改)存储库中信息的基于web的客户端(主要是因为这是您配置它们的唯一方法)。否则,即使您在一台机器上独自使用Subversion,也不应该使用它

如果您有网络问题,无法使用始终处于运行状态的版本控制系统,请使用Git之类的分布式系统。Git的使用有点复杂,但因为存储库保存在多个地方(没有主副本),所以在没有网络连接的情况下,您仍然可以进行工作,在有连接的情况下,您可以将更改合并到其他repo中


还有一件事 我在使用Git和Dropbox时发现了这一点。无法使用Subversion执行此操作,即使使用
svnserve
(尽管请参见下面的注释)。这可能是你工作的最好方式。您将回购放在Dropbox上,但从未直接处理回购。相反,您可以在其他地方克隆它,然后将更改推回到Dropbox repo

下面的注释 我想让你明白,你不是从我这里听到的。如果你被警察审问过,我会否认一切,并召集目击证人,让我远离犯罪现场:

我见过人们将Subversion存储库放在Dropbox上,然后在机器上运行
svnserve
来访问该存储库。他们已经在Mac、Windows和Linux混合环境中成功地做到了这一点。但是,请注意,它们正在运行
svnserve
。注意这是他们的私有存储库。请注意,没有其他人在使用它。请注意,他们一次从不从多台计算机访问该存储库。请注意,我否认我曾经说过这一点。请注意,这是按原样出售的,没有隐含的担保


如果你真的真的想使用Subversion,你真的真的需要访问多个系统,你没有一个很好的方法来进行联网,你知道这是不受支持的,一切都由你自己承担风险,你可以尝试一下。没有保证,但也有人这样做。

SVN开发人员非常明确地不支持并推荐这种使用场景。要么使用SVN设置一个真正的服务器,要么使用Google Code或SourceForge之类的公共托管服务,要么将版本控制系统切换到Mercurial或Git之类的工具。感谢您的评论。谷歌代码似乎只适用于开源项目,所以这不行。嗯,我几乎可以肯定,我要么需要与此斗争很长一段时间,要么需要进一步的指导,但使用VisualSVN设置服务器实际上非常简单。现在一切都很顺利!谢谢感谢Ivan提供使用VisualSVN的直接提示。我昨天没有注意到你的评论,尽管看起来你是在我向本发表评论之前发布的。无论如何,我已经完成了VisualSVN服务器的设置,但我首先想到的是,我必须通过手动配置svn和Apache来协同工作,以更加困难的方式完成设置。