Subversion中的单个多用户结账 - 可能吗?

时间:2008-11-17 11:53:11

标签: svn multi-user

在我们的组织中,我们遇到以下问题。我们想要对我们的Web树进行修订控制,但是我们中的许多人希望能够更改(并检入)该树的任何文件。我们还希望只有一次退房,因为这棵树相当庞大。对于该树的部分,我们目前正在使用RCS,它允许上述行为,但当然还有其他一些缺点。

有没有人知道如何在Unix服务器上使用Subversion做这样的事情(可能有某种解决方法)?

10 个答案:

答案 0 :(得分:2)

开发人员不在自己的机器上吗?树是否如此庞大以至于必须将其签出到服务器上的共享网络驱动器上,因为它不适合单个开发人员的工作站?我认为这个问题需要一些数字来进一步澄清其背后的问题和推理。

答案 1 :(得分:1)

为什么不查看你有兴趣改变的树的位?这应该不是问题。也许我对“单次结账”的含义感到困惑。

答案 2 :(得分:1)

在典型的SVN环境中,每个用户都有自己的(完整或部分)树副本,在那里她可以对树进行任何更改,而不会打扰或打破她的同事。然后她决定要办理入住手续。所有其他人都可以结账,只要他们认为这是最好的时间。并且主(部署)用户定期检查(每日构建)以检查完整性。

我认为与CVS / subversion相比,你的混淆是RCS:RCS在编辑时为所有其他人阻止文件,SVN不会阻止任何事情(通常情况下阻塞是可能的但很少使用)。

答案 3 :(得分:1)

@Lytha:我知道RCS是基于锁的,在我们的场景中我们没有问题。我也知道你可以使用SVN锁定,但每用户签出问题仍然存在......

答案 4 :(得分:1)

磁盘驱动器很便宜。让每个开发人员签出一份树的副本。 Subversion解决了锁定问题,因此每个拥有自己副本的用户都不会干扰其他用户进行更改。如果每个人签出并管理他们自己的源代码树开发版本,您将会更有效率并且对更改负有更好的责任。

答案 5 :(得分:1)

正如您可能从其他帖子中看到的,这个问题的一般答案是“不要这样做”。一般来说,Subversion用于将部分或全部存储库单独检出到本地工作区。

如果你绝对肯定,必须每个开发人员都能看到整个存储库,但开发人员只会改变一小部分,这里有一个潜在的解决方案。您需要开发一些脚本来促进我所描述的内容(基于我以前使用的UNIX IDE)。

我还假设您的评论认为环境是UNIX或Linux - 我不认为Windows中可能存在以下情况。

  1. 在某个位置以只读方式签出整个项目。确保所有开发人员都具有读取权限。
  2. 让开发人员可以执行的脚本抓取目录结构,使用符号链接创建结构镜像到该开发人员工作区中的只读目录。
  3. 检查要编辑的树的一部分时,删除符号链接并从Subversion签出该路径(您可能希望脚本包装svn命令来处理此问题)
  4. svn commit或单独的脚本中,您可能希望删除工作区目录并重新建立符号链接。
  5. 通过Subversion中的post-commit挂钩或定期使用cron或类似内容更新只读副本。
  6. 符号链接提供了整个树每个开发人员的视图,并且只允许“本地”签出仅开发人员正在主动编辑的树的那些部分。

    迂回的原因是Subversion确实不打算以这种方式使用。但是,这种方法会对你所描述的内容产生一些痛苦。

答案 6 :(得分:0)

我建议您为所有开发人员都可以访问的Web树使用一个特殊帐户,并以该用户身份检出Web树。

答案 7 :(得分:0)

@Jesper:是的,那是可能的。所有成员的额外帐户,可能还有额外的sudo规则。

@Jon:问题是我们基本上所有人都需要在树的部分中更改某些文件。这就是为什么我们都需要整棵树,但我们不希望有这么多的结账。

答案 8 :(得分:0)

Subversion允许您签出树的任何部分,1.5版也支持sparse checkouts。这意味着您可以将结帐微调到单个目录级别(但不像RCS那样可以达到单个文件级别)。

例如,如果您的存储库看起来像这样:

Repository Root
  tags
  branches
  trunk
    doc
    src
      module1
        resources
      module2
    images

您只能使用以下方法检出module1目录(而不是其子目录)中的文件:

svn checkout --depth=files svn://server/repository/trunk/src/module1

如果您还需要子目录内容,可以稍后调整结帐大小,请参阅文档。

答案 9 :(得分:0)

如果检查出令您担心的工作副本是延迟/带宽,请记住工作副本完全是自包含的。这意味着您可以签出一个庞大的存储库,然后只需将“工作副本”复制到需要它的人。

同样的技巧也适用于分支机构 - 如果你有一个未经改动的最近干线工作副本,你可以简单地复制它,然后'svn切换'它到一个新的分支。

  1. 将大型存储库签出到base_working_copy(隔夜?)
  2. cp -a base_working_copy my_working_copy(以及其他需要它的人)
  3. cp -a base_working_copy my_branch
  4. cd my_branch
  5. 将我的分支切换到任何分支网址
  6. 我也成功地使用它来向有带宽问题的人们发送大量工作副本。

    另请参阅:using subversion with a really really big site