如何在Subversion中设置共享的工作副本

时间:2020-03-06 14:58:19  来源:igfitidea点击:

我还是很新的使用Subversion。

是否可以在每个人(在这种情况下为3)可以检出并将文件提交到的网络可用共享(c:\ svn \ projects \ website)上有一个工作副本?我们不需要构建服务器,因为它是一个ASP站点,设计人员在保存文件时习惯于立即获得结果。我可以尝试向他们展示如何在他们的计算机上本地设置它,但是如果我们可以共享开发服务器上的文件,并且仍然能够在某人完成任务后进行提交,那将是理想的选择。

一个简单的解决方案是让我们所有人都使用相同的Subversion用户名,这至少将允许我将文件置于版本控制下。

但是是否可以从svn存储库中检出一个文件夹,但仍然要求每个人都使用其用户名/密码登录才能提交?

编辑:我正在尝试采用当前的工作流程,即使用Frontpage Extensions或者FTP编辑站点的LIVE版本。并将其移至更好的位置。在这种情况下,我设置为镜像实时服务器的开发服务器上实时站点的副本,请删除首页扩展访问。这样,设计人员仍然可以立即获得满意的效果,但是我不必担心他们正在编辑实时文件。甚至在Subversion中使用共享的用户/密码仍然是版本控制。这可能不是理想的,如果设计师实际上是程序员,我会尽力让他们充分参与进来,但事实并非如此。在这种情况下,这是我所能做的最好的事情,可以避免大量的学习曲线和工作停顿。

解决方案

工作副本意味着每个用户都有自己的副本。并且存储库是共享的。只有检出WC的人才能提交更改。

如果我们不希望使用服务器,例如分布式VCS(Bzr,git和mercurial如今很流行),或者我们可以考虑使用Subversion之外的其他东西,或者我们应该考虑使用Subversion托管服务。

不建议共享一个工作副本。这确实违背了版本控制的目的。请不要那样做。

我们无法签出工作副本,工作副本是已签出代码的术语。如果我们要求多个开发人员同时使用同一组工作文件,那么我们将严重破坏拥有版本控制系统的主要用途之一,该版本控制系统允许开发人员彼此独立地进行更改。不会破坏别人的东西。

就是说,如果我们真的想这样做,可以。对于Linux服务器,要走的路是让每个用户都运行一个不同的ssh用户代理(对于Windows计算机,我们使用Pagent),每个用户具有不同的ssh身份。然后让svn服务器将来自不同身份的ssh隧道识别为来自不同用户。不幸的是,我不知道如何在Windows中进行设置。

以我的经验,它开箱即用就可以了。在我公司,这种设置已经存在很多年了,没有遇到任何问题(除了明显的共享工作副本之外)。

但是,如果需要站点的"实时"版本,则应考虑使用单独的工作副本和触发器(挂钩),该触发器在提交时更新共享位置。

我们应该拥有SVN信息库,每个用户(使用自己的用户名和密码来访问SVN信息库)都应该签出自己的工作副本。

可以在一个PC上执行此操作(这是问题,有多个开发人员共享的PC吗?),方法是使用不同的PC用户帐户,让人们签入自己的帐户,甚至共享一个PC用户帐户,让人们签入另一个工作文件夹。我认为这不是特别整洁或者不错的方法,如果这些天公司不能为每个开发人员买一台PC,那么值得一试!

我建议:

  • 每个员工在自己的PC上都有自己的工作副本。
  • 应该有一个ANT或者Maven或者类似的构建脚本,该脚本将允许开发人员将其工作副本构建并部署到开发Web服务器上,以便他们可以看到它的状态。这可能很简单,例如"将文件复制到此共享位置"。
  • 由于每个员工都有自己的SVN用户名/密码,因此我们可以查看谁进行了更改,并在他们离开公司时将他们拒之门外。
  • 这可能会创建一个设计人员必须遵循的流程,而不是我们当前所面临的无政府状态,但是如果其中任何一个流程花了超过半天的时间来获取SVN以及如何运行构建脚本以将其部署到开发Web服务器上,那么你有更大的问题。

我们需要使用svnserve(SVN随附的轻量级SVN服务器)或者apache mod。

有了它,我们可以像这样配置权限:

[general]
password-db = userfile
realm = example realm

# anonymous users can only read the repository
anon-access = read

# authenticated users can both read and write
auth-access = write

我认为我们是在卖空团队。非开发人员可以轻松学习使用SVN,尤其是像乌龟这样的东西。如果我们要解决设置SVN的麻烦,那么只需给每个人一个单独的登录名,然后让他们使用自己的本地工作副本即可。进行快速,肮脏的CruiseControl自动构建,以从SVN中提取内容以创建登台站点内容。这只是更多的工作,结果会更好。

我知道这是一个古老的问题/维基,但是我想到的解决方法如下。

这个问题可以重述如下:我们如何使用真实的源代码控制系统(如SVN),并且仍然允许非技术设计师享受他们所熟悉和喜爱的相同的保存-预览-保存-预览循环。 ?

要点:

  • 为了充分利用SVN,每个用户都需要拥有自己的工作副本。就是那样子。
  • 如果应用程序中仍然有经典的ASP(NOT .NET),那么像Cassini这样的轻量级本地服务器将无法完成任务。
  • 用户最好不必安装或者学习使用SVN客户端(如(非常简单)的Tortoise)。

我的方法:

  • 在SVN中为每个用户创建一个分支
  • 在每个客户端上,将映射的驱动器提供到开发服务器上特定于用户的工作目录。他们将使用FrontPage,Expression,SharePoint设计器或者在此处进行更改的任何方法。
  • 在开发服务器上的IIS中,创建一个具有特定于用户的主机标头的特定于用户的网站(例如," alice.www.mysite.com"或者" bob.www.mysite.com")。他们将通过此URL浏览网站以查看其更改。这也使他们可以在将其合并到主干中之前向其他人显示所做的更改。
  • 使用CruiseControl.NET,提供任务以检出,更新,添加和提交每个用户分支的更改。弄清楚如何做到这一点,以便每个用户只能看到他们自己的任务。
  • 使用CruiseControl.NET,创建一个任务,将其更改合并到主干中
  • 使用CruiseControl.NET创建一个任务,该任务将使用合并的更改来更新实际的开发站点(dev.www.mysite.com)。该站点将显示每个人的工作组合,并充当暂存和调试区域。如果我们使用的是WAP,则还希望该任务触发构建。

听起来很多步骤,但实际上非常简单。创建分支,映射驱动器,设置新的IIS站点并使它们发疯。

在幕后,这与为他们提供本地IIS安装并让他们在必要时使用SVN提交更改完全相同,就像开发人员一样。不同之处在于,它们的工作副本位于服务器上,IIS / Cassini不必位于其包装盒中,并且它们将使用Web界面执行SVN操作(例如,提交,更新等)。

祝你好运!