2011-10-11 63 views
0

我敢肯定,我不是最新的代码更改为从SVN直播服务器刚刚回家前谁曾试图switch唯一的一个,才发现有些傻瓜已经修改过的文件直接在服务器上,现在你有五个PHP脚本标记为冲突,该网站是下降和你得到由你的妻子大吼迟到吃饭,因为你必须手动解决所有的冲突,因为回滚是不可能的。扩展为PHP忽略SVN冲突

我认为这将是真棒,如果有对PHP会使用解析错误unexpected T_SL遇到冲突的文件时导致死亡的扩展,但仅使用每一个冲突的工作拷贝的版本将代替解析它。

<<<<<<< .mine 
changes_my_stupid_coworker_made(); // This would be executed 
======= 
my_important_changes(); // This would NOT be executed 
>>>>>>> .r9 

是否有这样的扩展或可以为类似效果的用户?

+0

我只能想象这是一个非常复杂的插件,可以在保持性能的同时进行编写......而问题本身可以通过不让所有人访问实时环境来避免,如果您需要编辑实时环境在版本控制之外,你可能会做错事情(在你的工作流程中)... – sg3s

+0

我同意,没有人应该在生活环境中触碰任何东西,我们的工作流程严格禁止没有非常有说服力的理由。尽管如此,也许是因为“令人信服的理由”的定义因人而异。 – Kaivosukeltaja

+0

你的同事正在使用“jenga”反模式。参见[每日跆拳道:右键进行版本管理(http://thedailywtf.com/Articles/Release-Management-Done-Right.aspx)有关它的信息。 要强制颠覆,用使用SVN出口的JB Nizet的建议,并设置它来覆盖服务器的文件。 有人的工作迷路了? Shucks,他们没有按照这个过程。如果事情真的很紧急,告诉他们修改“标记”分支中的来源,并通知项目经理清理混乱(即需要一个新的标记,而旧的标记不再是“干净的”)。 – JBert

回答

3

这真的是解决问题的最糟糕的方式。

  • 永远不要让任何人直接在服务器上编辑文件。这些文件可以是只读的(或者可以解雇的罪魁祸首)
  • 不要直接从SVN存储库更新服务器:更新工作副本,在此工作副本上运行所有单元和集成测试,然后标记修改并将工作副本导出到服务器上

如果人们无法正常工作,请不要让他们再工作。

+0

我们已经在更新过程中标记修订并使用它们,但是如果服务器上存在本地更改,它们仍然可能会发生冲突。测试集成测试环境中的更改时,甚至无法发现它们。我们还需要允许对文件进行写访问,否则'svn switch'无法触及它们。 – Kaivosukeltaja

+0

不要使服务器从工作副本提供文件。通过有限的文件访问,使其从导出的工作副本提供文件。 –

0

尝试更新现场环境迫使他们满,仍可能会造成问题(见前面的评论),但防止冲突的发生。从那里开始,您可以不必更改版本控制之外的实时环境。

从我的头顶

svn up --accept theirs-full 

我们确保所有的开发人员有一种方法来更新现场环境,不论是非常严格的。我们无法通过实时服务器上的命令行进行更新,但我们在服务器上有一个中央脚本,我们可以在其上配置项目,然后我们可以通过脚本提供更新命令。然后,脚本将首先进行比较,检查冲突并更新(如果没有错误),并发送多个人员和负责该项目的团队负责人发送带有cmd输出的电子邮件。

这是相当整洁,防止可怕的螺丝起坐,真正深夜。