我们在与客户的几个项目中尝试了 Subversion。它的效果比我希望的要好,但是有一些粗糙的边缘。
背景:
- 该应用程序将自动注册它需要的所有内容,因此如果从一台计算机复制到另一台计算机,它是安全的。
- 它包括许多文本和二进制(矢量图像)的设置文件。
- 该应用程序本地安装在每台计算机上(因此无需网络访问即可使用)。
- 客户端更新文件,我们为他们更新文件。
当前的解决方案是在我们的一个 Web 服务器上使用 Subversion 存储库。如果他们需要更新文件,他们会安装 TortoiseSVN,否则他们会使用 bat 文件调用命令行客户端。
自从我们引入 Subversion 以来,安装不同步的问题为零。我们还能够追踪某些设置混乱的情况(并找出它发生的原因)。
问题:
偶尔你会发生冲突。主要是因为新手用户错误地更改了其中一项设置。是否有 svn-client 可以轻松解决新手用户的冲突?
(其中一家公司目前的解决方案是删除整个安装并执行新的结帐)
编辑:该项目通常是我们标准应用程序的定制版本。客户所在地的用户数量为2-10。
我对 Subversion 的不满之一是将所有内容视为一系列版本,其他版本控制系统(例如Mercurial)查看变更集(如最新的 Stack Overflow 播客中所述)。Subversion 的这一方面使合并变得非常困难,因为它并不真正知道发生了什么变化。
作为一种解决方案,它并不比您当前的解决方案好多少,我建议在更新之前运行svn revert来重置安装。
在这些情况下,svn export 是您的朋友,因为它提供了代码的“干净”快照。我的建议是以这种方式进行部署以进行测试和生产。这将帮助您找到诸如错过签入或冲突之类的提交问题,因为您只获取特定版本的文件。
为了首先防止其中一些问题,特别是如果您被 svn 卡住,请尝试使用生产分支。生产分支由经验丰富的开发人员维护,他可以使用多路差异工具从开发人员的分支中提取更改。正如其他人所指出的,svn merge(甚至更新)可能容易出错,因此这个工作流程允许有选择地合并更改,这就是 dscm(如 Richard 所描述的)的工作方式。
结帐与导出的好处在于,您可以看到在签出副本上工作的用户所做的更改。
如果您想要一个自动化的解决方案,您可以让您的部署脚本使用 svn diff 将更改的副本保存到某个位置(或通过电子邮件发送给您),然后在更新之前进行还原。