基于文件的SVN存储库能否支持同时多用户情况?

基于文件的SVN存储库能否支持同时多用户情况?,svn,integrity,multi-user,Svn,Integrity,Multi User,如果多个用户访问基于文件的SVN存储库以同时提交许多内容,SVN能否保证数据完整性?如果是,怎么做?或者如果不是,我应该在多用户情况下使用什么服务方法?Subversion提交被设计为原子的。因此,不可能有多个用户同时提交相同的修订号。从: svn提交操作将对任意数量的文件和目录的更改发布为单个原子事务。在工作副本中,您可以更改文件的内容;创建、删除、重命名和复制文件和目录;然后将一整套更改作为原子事务提交 原子事务的意思很简单:要么所有的更改都发生在存储库中,要么没有任何更改发生。Subver

如果多个用户访问基于文件的SVN存储库以同时提交许多内容,SVN能否保证数据完整性?如果是,怎么做?或者如果不是,我应该在多用户情况下使用什么服务方法?

Subversion提交被设计为原子的。因此,不可能有多个用户同时提交相同的修订号。从:

svn提交操作将对任意数量的文件和目录的更改发布为单个原子事务。在工作副本中,您可以更改文件的内容;创建、删除、重命名和复制文件和目录;然后将一整套更改作为原子事务提交

原子事务的意思很简单:要么所有的更改都发生在存储库中,要么没有任何更改发生。Subversion试图在程序崩溃、系统崩溃、网络问题和其他用户行为面前保持原子性

每次存储库接受提交时,都会创建文件系统树的新状态,称为修订。每个版本都指定了一个唯一的自然编号,比上一个版本的编号大一个。新创建的存储库的初始版本编号为0,只包含一个空的根目录


从《颠覆》一书中:

Subversion存储库可以由运行在存储库所在的同一台计算机上的客户端使用包含文件://scheme的URL同时访问。但是典型的Subversion设置涉及从办公室或世界各地的计算机上的客户端访问单个服务器机器

文件有几个问题://
方案:

  • 它必须在同一台服务器上。有些人将存储库放在Windows共享或NFS驱动器上,然后让人装载共享并使用
    文件://
    方案。这是行不通的。它必须在同一台计算机上才能使
    文件://
    访问方案工作
  • 这是不安全的。这是最大的问题。所有用户都必须对存储库中的文件具有读/写权限,这意味着有人可以删除存储库或在Subversion的背后隐藏文件

  • 使用
    svn://
    http://
    并不难设置。我使用Subversion作为我自己的个人版本控制系统,并使用
    svn://
    方案。使用http://的Subversion稍微复杂一些,但我可以在大约一个小时内完成

只想分享我过去的经验

我的公司在SVN上主持了一个项目。最初,开发团队使用file://协议访问SMB共享卷上的存储库。老实说,它似乎工作得很好。然而,这场演出简直糟透了。当我说“糟糕”时,就好像花了几分钟的时间进行更新/提交。此外,我认为您可以从不同的来源或参考中看到类似的语句:file://protocol只针对本地机器中的单用户访问


当我参与到这个项目中时,我立即改变使用svnserve进行多用户访问的临时策略(尽管我个人对我管理的其他svn存储库使用http)。我们立即看到性能有了大幅度的提高。额外的安装时间仅为2分钟(因为我们有一台服务器,我可以在控制台模式下简单地启动svnserve并让它运行)。除非您真的无法安排任何机器运行svnserve/apache,否则我看不出有任何理由坚持使用file://协议进行多用户访问。

事实上,我在想:“原子”是否意味着多用户安全?我认为我们可以让操作是原子的(即,存储库不会处于半完成操作的状态),同时它对于并发访问仍然不安全。(虽然我相信它在Subversion中仍然是安全的。我只是对使用“原子性”来推理“多用户安全”有点怀疑。“使用
svn://
http://
设置起来并不难”不是“文件://方案的问题”。我不理解“它必须在同一台服务器上”部分。这意味着什么?当然,存储库应该存储在单个位置。但是,如果共享网络驱动器简单地使此存储副本可用,那么它们与此有什么关系?