2010-10-10 157 views
2

我正在考虑在我的工作中实现源代码管理。理想情况下,我想使用Subversion,因为它似乎是目前的首选工具。但是,我似乎碰到了一堵砖墙,因为对于我们所有的开发人员来说,在当地环境中工作并不实际。我们使用Coldfusion进行网络开发,并使用共享的开发服务器。对文件所做的更改可以在浏览器中快速刷新。共享开发服务器上的Subversion

我们公司拥有超过100个站点,我们的开发服务器镜像所有这些生产站点。我们经常需要对这100个中的1个进行快速调整,测试并快速上传到生产环境。如果我们不得不在本地下载一个给定的网站,在我们的本地网络服务器上进行设置,这些小的更改将变成耗时的任务。另外,通常撰稿人和技术较差的人会想要进入HTML页面并更改副本。这在我们当前的共享服务器设置中很简单。

很久以前,我们使用了一个名为NGSource的源代码控制,当您将一个项目签入存储库时,它将文件权限更改为只读。我们会将文件检查到共享的开发者服务器,并且会改变读取和写入的权限。我们都会检查存储库,以确保有人不在我们认为需要处理的文件上工作。这运作良好,可以向撰稿人解释。问题是NGsource客户很慢,据我所知,他们可能会停业。

那么有没有办法在签入和签出Subversion时实现文件权限的更改?如果没有,是否有更好的开源解决方案?在共享环境中开发并跳过本地开发是否糟糕?

+0

你能解释一下你为什么需要“只读“模式的文件?当你描述它时,你可以保存生产站点上的工作副本。因此开发人员或撰稿人只需连接到站点,编辑它并直接从生产站点提交更改。 – Moisei 2010-10-10 11:20:28

+0

哇,你就像是我在整个互联网上唯一使用NGSource的唯一其他人......我目前正在试图说服管理层改变像SVN这样的体面,但这很难: ( – 2010-10-19 10:43:41

回答

1

您可以使用'svn lock'[1]来确保没有其他人能够编辑您当前正在处理的文件。

[1] http://svnbook.red-bean.com/en/1.2/svn.ref.svn.c.lock.html

+0

看看锁定部分,你需要'svn:needs-lock'属性来完成这个工作。http://svnbook.red-bean.com/en/1.5/svn.advanced.locking.html – msandiford 2010-10-10 12:01:45

+0

谢谢Spong,需求锁定看起来就像我在找的东西,这听起来是对的吗?1.将所有站点文件放入存储库,因为它们在开发服务器上构建,并为所有文件设置needs-lock = yes。手动将开发服务器文件上的所有权限更改为只读。3.当任何开发人员或撰稿人检出文件并将开发工作副本指向开发服务器时,该文件将更改为读/写,其他人将无法触摸其他文件,除非他们使用颠覆。是否有issu e与多个svn用户指向相同的工作副本? – DannyLeavitt 2010-10-10 16:34:22

0

你能解释一下你为什么需要“只读”模式的文件吗?正如你所描述的那样,你可以在生产网站上维护一个工作副本。因此开发人员或撰稿人只需连接到站点,编辑它并直接从生产站点提交更改。

+0

我们有一个我们都在使用的开发服务器,并指向我们的浏览器以随时测试。我们不想直接编辑生产文件。这个想法是所有人都可以从开发服务器上的普通“工作副本”中工作,并且仍然可以使用版本控制。如果所有文件只在被检出之前才被读取,则会强制所有人使用版本控制。这就是我想要实现的。 – DannyLeavitt 2010-10-10 16:21:41

+0

只是不这样做!在开发机器上为每个开发人员展示一份工作副本。你会遇到权限冲突,只是用你的方法命名一个问题。 – zellus 2010-10-10 21:05:37

0

我是一家开发公司的版本控制管理器,它可以制作和维护Web应用程序和网站,但几乎不像您的那么多。我了解在100多个网站正常工作(如果有的话)n开发人员/版权所有者的当地信息箱中的复杂性,并且认为这是一个合法的原因,因为它们不会在本地签到。

关于我们的流程

在我们的过程,也就是本地制造的第一个去的地方是对客户数据的合理表示审核登台环境的任何变化,那么当它被认为是好的它终于转移到生产环境。我们不会在生产安装版本的代码库,这是因为:

  1. 文件系统开销: SVN保持的东西等同于一个签出目录两次的信息。这就是为什么你可以在不连接到服务器的情况下进行区分和还原的原因。
  2. 安全性:拥有额外的.svn目录只是另一个攻击向量。这可以得到补偿,但收益是否超过成本?对我们来说,不。

相反,我们使用RepliWEb这样的工具将代码库从Staging复制到Production。

关于您可能的过程

请问,如果你有一个登台环境与配置的所有100多个站点,运行它的工作,和源代码控制之下?这是所有开发人员和版权所有人用来进行修改的环境,然后他们会提交。当修改被认为是好的时候,像RepliWeb这样的工具可以将Staging中的版本(不包含.svn目录)转移到Production中。如果贵公司的文件系统开销和安全风险可以忽略不计,那么RepliWeb将被取代,只需简单地在生产环境中清理检查站点(确保删除任何以前的工件)即可。

我希望这会有所帮助。

谢谢
扎卡里

+0

嘿,扎克,你是说所有的撰稿人和开发人员应该在本地进行更改,上传到分段,然后从其本地副本提交?看起来似乎很难将这一过程解释给那些习惯于在临时环境中工作的撰稿人。更不用说这将是一个较慢的工作流程。我只希望我能够在分期环境中直接工作1个“工作副本”。尽管每个人似乎都认为这是一种犯罪行为。我可能只是做一个像备份系统一样的“时间机器”,至少能够检索过去版本的文件。 – DannyLeavitt 2010-10-15 21:59:58

+0

嗨,丹尼。不,我基本上是说你刚刚说的现在发生的事情:1.开发人员和撰稿人在分期环境中进行编辑; 2.他们从暂存环境(在版本控制下)提交这些更改,然后(通过适合您需求的某种机制); 3.将生产环境同步到分段。我明白有些人可能会认为是异端邪说。也许我只是懒惰,但这似乎是一个合理的解决方案,因为您的组织正在维护100多个网站。谢谢。 – 2010-10-16 06:03:44

0

我能想象你的痛苦,但你并没有告诉我们什么地方错了你目前的程序)。毕竟,它“不会修复,如果它不坏”。仅仅因为每个人都使用SVN/GIT等,所以没有人会为你服务。

我们在这里有类似的要求,但幸运的是仍然有设置本地签出和本地网络服务器,有些人在提交之前使用。这是推荐的方式。 对于通过samba或nfs进行安装的其他人来说,有一个共享的开发环境。但仍然每个人都拥有自己的工作空间。 工作在前台的人很多,并且检查了不重要的更改,他们使用web界面调用数据中心或目标(客户端)系统上的主登台系统上的svn更新。当事情破裂时,这是他们的自由裁量权和错误。当然,这些步骤可以完全自动化使用svn钩子。

我们的结果迄今为止是可以接受的。

如果您认为个人工作空间的开销对您的业务案例来说太高,那么我认识的任何源代码控制都可以帮助您。你仍然可以锁定svn中的文件,以便人们无法检查更改,直到它解锁,但这是非常非常的1990年...

毕竟什么是源代码管理的目标?一些我能想到的:

  • Paralell发展与许多人
  • 隔离的稳定和不稳定的代码
  • 透明度和回滚能力

当你有没有一个个人工作空间的概念,一个“用户”代替匿名的“团队”来检查文件,大多数源代码管理功能自然不适合你。

也许你可以在你的coldfusion服务器上有子文件夹?通过从源代码管理服务器自动更新所有这些开销来减少个人工作区管理开销(通常我不推荐)?

如果可能,您需要先离开“我们在服务器上编辑”习惯,然后再考虑源代码控制。另一种方式圆将是复杂;)

Ç

0

在我们公司,我们已经非常相似的情况 - 不是开发更多的项目。所以所有的项目都在开发服务器上,开发人员可以在其上轻松开展工作。通常只有一个开发人员在给定时间在一个项目上工作。但开发人员来了,离开,休假,踢球等,所以我们需要快速切换项目。 但理想情况下使用版本控制,以摆脱对改变某些东西的恐惧,以及版本控制带来的所有其他好处。

像svn,csv,p4等集中版本控件不适合这种解决方案。只能使用分布式版本控制。

我们正要测试一些分布式版本控制,比如Mercurial或GIT,它似乎是唯一适合在所描述的环境中工作的版本控制器,即使它们可能不是为这种情况而开发的。

但是由于开发人员没有个人空间,我们将无法使用版本控制的所有方面。开发者将需要把他们的名字int checkin note。但至少比什么都没有。

我做了一些研究,这里是我发现了一些有趣的联系:

How to use version control on a remote development server?

Version control has me stumped

https://www.mercurial-scm.org/wiki/TortoiseHg

http://git-scm.com/