1

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

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

4

10 回答 10

2

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

于 2008-11-17T12:56:36.290 回答
1

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

如果您绝对肯定地必须了解每个开发人员的整个存储库,但开发人员只更改了一小部分,那么这里有一个适合您的潜在解决方案。您需要开发一些脚本来简化我所描述的内容(它基于我曾经使用的 UNIX IDE)。

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

  1. 在某个位置以只读方式签出整个项目。确保所有开发人员都具有对其的读取权限。
  2. 有一个开发人员可以执行的脚本,该脚本使用指向该开发人员工作区中只读目录的符号链接来创建该结构的镜像,从而对目录结构进行爬网。
  3. 签出要编辑的树的一部分时,删除符号链接并从 Subversion 签出该路径(您可能需要一个脚本来包装svn命令来处理此问题)
  4. 在单独的脚本中svn commit或在单独的脚本中,您可能希望删除工作区目录并重新建立符号链接。
  5. post-commit通过Subversion 中的挂钩或定期使用cron或类似的方式更新只读副本。

符号链接为每个开发人员提供了整个树的视图,并允许仅对开发人员正在积极编辑的树的那些部分进行“本地”检查。

迂回的原因是 Subversion 真的不打算以这种方式使用。但是,对于您所描述的内容,这种方法会起作用,但会有些痛苦。

于 2008-11-17T15:12:10.183 回答
1

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

于 2008-11-17T13:14:10.110 回答
1

为什么不直接查看您有兴趣改变的那棵树呢?那应该不是问题。也许我对您所说的“单次退房”感到困惑。

于 2008-11-17T11:56:24.370 回答
1

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

我认为与 CVS/subversion 相比,您的困惑是 RCS:RCS 在编辑时为所有其他人阻止文件,SVN 不会阻止任何内容(通常。阻止是可能的,但很少使用)。

于 2008-11-17T12:17:20.770 回答
1

@Lytha:我知道 RCS 是基于锁的,在我们的场景中我们对此没有任何问题。我也知道您可以使用带有锁定功能的 SVN,但每个用户的签出问题仍然存在......

于 2008-11-17T12:34:04.713 回答
0

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

于 2008-11-17T11:54:20.207 回答
0

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

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

于 2008-11-17T11:58:35.440 回答
0

Subversion 允许您检出树的任何部分,并且 1.5 版还支持稀疏检出。这意味着您可以将结帐微调到单个目录级别(但不能达到 RCS 可以达到的单个文件级别)。

例如,如果您的存储库如下所示:

存储库根
  标签
  分支机构
  树干
    文档
    源代码
      模块1
        资源
      模块2
    图片

您可以使用以下命令仅签出module1目录(而不是其子目录)中的文件:

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

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

于 2008-11-17T18:16:43.417 回答
0

如果检查工作副本的延迟/带宽让您担心,请记住工作副本是完全独立的。这意味着您可以签出一个巨大的存储库,然后简单地将那个“工作副本”复制给任何需要它的人。

同样的技巧也适用于分支——如果你有一个未更改的最近的主干工作副本,你可以简单地复制它,然后将它“svn switch”到一个新的分支。

  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. 将我的分支切换到任何分支 URL

我还成功地使用它向有带宽问题的人发送大型工作副本的 CD。

另见:在一个非常大的网站上使用颠覆

于 2008-11-17T18:22:56.960 回答