在软件开发领域,版本控制工具的使用常常引发争议。有人对其赞不绝口,而有人则认为它增加了不必要的复杂性。对于那些在小型团队中与客户紧密合作的人来说,快速响应反馈至关重要。在这种情况下,不使用或使用过时的版本控制工具,往往会导致工作效率低下,甚至出现诸如“Tom,刚刚是不是也修改了这个文件?更改怎么不见了?”这样的问题。为了避免这些问题,采用有效的版本控制工具变得尤为重要。
作为开发者,工具的易用性是关键。如果一个工具安装复杂、上手困难,那么它很可能会被弃用。PureCM采用轻量级的客户端/服务器架构,无需额外的基础设施支持。它内置了安全且性能优化的数据库,并且可以免费使用。如果愿意,甚至可以将服务器和客户端运行在同一台机器上。可以通过Visual Studio进行日常操作,如检出和检入,或者使用跨平台的图形用户界面(GUI)来处理更高级的选项。这种设置让可以在几小时内开始工作,而不是几天甚至几周。
为了便于合并,PureCM包含了强大的可视化工具来解决检入时的冲突。一个三步向导会引导完成整个过程,可以在其中选择要执行的操作和要合并的更改(例如“挑选”更改)。如果需要分析分支之间的差异,可以使用“流比较器”以图形方式展示它们。从流级别(即分支)开始,查看哪些文件夹和文件被添加、删除或更改,然后双击想要详细了解的文件或文件夹,深入到逐行差异。
每个开发团队的工作方式都略有不同,可能需要根据需求甚至不同类型的项目来组织开发生命周期。这就是为什么PureCM被设计得尽可能灵活,为提供所需的透明度,以跟踪开发进度。如何实现这一点?通过关注最小的共同点:任务。如果习惯于使用Source Safe或CVS这样的工具,需要改变对SCM的看法。不要只关注单个文件的更改,而是开始关注任务。
这种转变有重大影响:突然之间,开发者所做的更改与特定的客户需求相关联,无论是bug、增强功能还是一般问题。在PureCM中,一个changeset
是构成特定问题解决方案的文件集合。PureCM允许识别特定changeset
何时何地被合并,以及由谁合并。
作为一个有意义的文件更改集合,changeset
对于代码审查来说是一个非常强大的概念。只需选择一个特定的changeset
进行审查;接受它,或者在拒绝它的情况下回滚changeset
。在检入前本地测试更改是另一个使用changeset
可以简化开发者进行质量改进实践的例子。
即使在最优秀的团队中,错误也会偶尔发生。因此,需要能够回退到上一个稳定版本的可能性。由于可以轻松地在PureCM中识别changeset
,只需回滚它们(或回到上一个成功的构建),然后开始解决问题。鉴于处理的是一组有意义的更改,这使得理解出了什么问题变得更加容易。
为了防止此类事情发生,开发者可以随时在PureCM服务器上检查点他们的工作,而实际上并不需要将他们的代码提交到代码库。这样,一个有意义的changeset
可以在不影响稳定代码库的情况下本地开发和测试。
根据想要并行工作的程度,可以区分两个层次。首先,允许开发者同时从特定分支检出相同的文件,最终在检入更改时解决产生的冲突。其次,使用分支来防止在代码冻结期间(例如在测试时)开发停止。
要管理第一层,使用PureCM的基于策略的安全性来控制,是否想要允许多个检出,或者是否想要锁定已检出的文件。这些策略可以按文件类型指定,例如允许文本文件的多个检出,但锁定二进制文件。
当考虑使用分支进行并行开发时,需要一个提供需要的灵活性的工具。为了实现这一点,PureCM使用“流”的概念来表示代码线。因此,流可以用来表示分支和标签。这是可能的,因为流不是文件副本,而是对代码的特定版本的引用。然后由决定是否要防止对流的更改(即将其用作标签),或者是否将其用作分支。流的策略也可以按用户组设置,例如只允许高级开发者在发布流上写入。这种轻量级的方法允许非常灵活地处理分支,可以应用最佳实践,如按目的分支(开发、QA、发布)或按任务分支。
将流与changeset
视角结合起来,合并变得更加清晰。开始将changeset
(例如一个bug修复)从客户发布流推送到开发流。或者从临时开发流到主开发流。为了做到这一点,只需要选择想要合并的changeset
(s)并定义目标流。PureCM的“快速合并”功能会自动为合并。如果出现合并冲突,工具会自动弹出图形解决工具。
如果在阅读本文之前认为版本控制是敌人,希望它已经稍微动摇了信仰。当然,没有个人适应和密切接触,就没有友谊。在软件开发工具的世界里,试用是实现这一点的最好方式。所以尝试一下,下载PureCM免费试用,测试它的所有功能,限2个用户。
但在做任何其他事情之前,和分享想法和经验。对SCM有什么看法?认为它最重要的好处和缺点是什么?到目前为止有什么经验?