1

我正在尝试在 linux 机器上使用 subversion,存储库位于 Microsoft sbs2008 服务器上。(我可以从 Microsoft Windows 7 机器访问存储库。)有人能告诉我如何让它工作吗?

这就是我所做的。

# sudo mount -t cifs -v -o credentials=~/Files/server-mount-credentials,uid=richard,nocase,nounix,nosuid  //sbs2008/local ~/Files/server-mount/

# svn commit -m ""

Adding         file1
Sending        file2
Transmitting file data ........svn: Commit failed (details follow):
svn: database is locked

strace 显示:

open("/home/rdelorenzi/Files/server-mount/svn_repository/db/rep-cache.db", O_RDWR|O_CREAT|O_LARGEFILE, 0644) = 12

...

_llseek(12, 162816, [162816], SEEK_SET) = 0
read(12, "\n\0\0\0\20\1 \0\1 \1N\1|\1\252\1\330\2\6\0024\2b\2\220\2\276\2\354\3\32"..., 1024) = 1024

_llseek(12, 100352, [100352], SEEK_SET) = 0
read(12, "\n\0\0\0\24\0i\0\0i\0\227\0\305\0\363\1!\1O\1}\1\253\1\331\2\7\0025\2c"..., 1024) = 1024
_llseek(12, 52224, [52224], SEEK_SET)   = 0
read(12, "\n\0\0\0\24\0k\0\0\231\0\307\0\365\1#\1Q\1\177\1\255\1\333\2\t\0027\2d\2\222"..., 1024) = 1024

fcntl64(12, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741824, len=1}, 0xbf8e15e8) = 0
fcntl64(12, F_SETLK64, {type=F_WRLCK, whence=SEEK_SET, start=1073741826, len=510}, 0xbf8e15e8) = -1 EACCES (Permission denied)
4

4 回答 4

3

不要通过网络共享安装 subversion 存储库,它不会可靠地工作。

file:// 访问仅用于本地单用户访问,尤其是测试和调试。当您想要共享存储库时,您确实需要设置一个合适的服务器,这并不像您想象的那么困难。阅读名为“访问存储库”的部分,了解有关选择和设置服务器的指南。[关联]

正如 David W 所说,您需要运行 SVN 服务器。

于 2012-03-14T22:44:24.107 回答
2

您可以控制 Windows 机器吗?3690端口是否畅通?为什么不在svnserveWindows 机器上使用服务器。然后,您不必挂载文件系统。

在您的 Windows 机器上:

 c:\> svnserve -r C:\path\to\your\repository -d

在你的 Linux 盒子上

$ svn co svn://sbs2008/trunk

另一种可能性是在您的 Windows 机器上使用VisualSVN 服务器。然后,您可以使用 Apache 的 httpd 访问您的存储库:

$ svn co http://sbs2008/svn/trunk

VisualSVN Server 不是开源的,但它是免费的,只要您不需要像 Windows Active Directory 连接这样的高级东西。

于 2012-03-14T20:38:43.853 回答
1

好。假设我不知道也无法理解mount命令和参数。

在这种情况下,我只是问:

你到底想做什么?直接使用存储库的文件(不是repo中的文件,而是的文件)?!出于什么原因?!

Subversion 具有客户端-服务器架构,客户端与服务器通信,这隐藏了客户端处理物理存储库后端的详细信息

Subversion 的网络层是抽象的,这意味着 Subversion 客户端无论在何种服务器上运行,都表现出相同的一般行为。无论是用 Apache HTTP Server 说 HTTP 协议(​​http://),还是用 svnserve 说自定义 Subversion 协议(svn://),基本的网络模型都是一样的。

作为客户端人,您在工作副本中使用 Repository 的物理表示(repo 的状态),Repository的逻辑表示,由一对客户端和服务器提供;svn-client 作为客户端程序与存储库服务器通信,处理存储库,使用服务器访问协议公开的任何内容,服务器稍后在可能的最低层使用存储库(读写文件)

于 2012-03-14T20:09:42.027 回答
0

这与其说是一个答案,不如说是几个让你思考的问题。

为什么你认为这会奏效?cifs 文件系统驱动程序以这样一种方式公开 NTFS 文件系统,在最坏的情况下,您只能读取文件。cifs 驱动程序公开的功能必须在 NTFS 端具有匹配的功能。

因此,如果 SVN 所需的功能未实现或不受支持,那么您很可能会遇到这样的问题。

我建议查看 cifs 文档并检查已知限制或调整驱动程序以提供更多功能的方法。

当然,您还需要检查导出的 NTFS 文件系统的 ACL。如果此操作受 cifs 驱动程序支持并且应该可以工作,但如果 NTFS 文件系统的所有者错误或设置了只读位,它仍然会失败。

于 2012-03-14T17:02:52.573 回答