✍️本文译者: P2Tree
©️ 本文演绎自 Atlassian 编写的 Source code management。页面上所有内容采用知识共享-署名(CC BY 2.5 AU)许可协议。
源代码管理(Source code management
, SCM
)被用于追踪源代码仓库的修改。它可以追踪一个代码基线在历史上的变更情况,以及当多个开发者合并更新时帮助解决冲突。SCM
和版本控制(Version control
)是同一个意思。
随着软件工程中代码行数的增加以及开发者人数的增加,沟通成本和管理复杂度也相应增加。SCM
在缓解开发成本不断增加的压力上是一个重要的工具。
源代码管理工具的重要性
当多个开发者在一个共享的代码基线上工作时,经常容易发生同时编辑一块共有代码的情况。独立的开发者也许正在解决看似独立的特性,然而这些特性也许就在共享同一块代码,进而就会发生冲突。
不使用SCM
的情况下,这是个很麻烦的事情。开发者们可能会直接编辑文本,并通过远程传输协议(比如FTP或其他协议)进行共享,当一个开发者编辑了这个文件后,另一个开发者可能不知道文件已经被修改,从而会覆盖之前的修改。SCM
的目的就是提供一种保护机制,来避免这种特殊情况,也就被叫做版本控制。
SCM
提供了版本控制这种安全措施来预防当冲突发生时工作成果丢失的问题。这种安全措施能够对每一个独立开发者的变更追踪并识别冲突区域,进而避免内容覆盖。SCM
能够将发生的冲突位置反馈给开发者们,进而可以让开发者们安全的解决这些问题。
这一基础性的冲突预防机制也能附带提供开发团队内部被动沟通的作用。团队内部可以依赖于SCM
的监控内容来监控和讨论工作进度。SCM
追踪一个代码基线的完整历史变更情况,这可以帮助开发者测试和检查可能已经引入的bugs或者重复操作。
源代码管理的优势
SCM
提供了一系列的辅助特性来协助软件工作以一种更为友好的方式而进行。当SCM
开始追踪一个工程的所有变更后,将会建立一个工程生命周期内详细的历史记录。这个历史记录可以将来用于在代码基线上做一些回滚操作。利用SCM
能够直接将代码基线回退到之前的一个时间点上。这对于预防回归性更新(regressions on updates
)和消除错误是非常便捷的。
SCM
将每一个变更都记录下来的特性对于一个工程的版本发布日志也是非常有价值的。一个干净且维护良好的SCM
历史日志是可以直接拿来当作发布日志的。这为项目进展提供了可监测性和透明度,同时也可以和用户或其他非开发团队共享内容。
SCM
可以减少团队的沟通成本,从而提高发布速度。如果没有SCM
,开发者们可能会花费大量精力去计划一个内容上不会重叠的工作流,从而会使得开发工作进展缓慢。利用SCM
,开发者们可以同时独立的在分离的分支上做特性开发,然后再合并他们的工作。
总之,SCM
对软件开发团队来说是很重要的辅助工具,可以有效的减少开发中的成本,高效利用工程资源来提高工作效率。SCM
在现代软件开发中必不可少。很多专业的开发团队都在使用SCM
。
源代码管理最佳实践
1. 经常提交你的变更
提交操作很容易完成,应该尽可能的频繁提交来记录代码变更。每一个提交就是代码基线的一次快照,这些快照都能在未来需要时进行恢复。频繁的提交有利于回滚和撤销的工作。多个提交可以用git rebase
命令合并成一组单独的提交,方便整理提交更新日志。
2. 总是确保工作在最新版本
当多个开发者使用SCM
更新代码时,很容易会遇到本地版本落后于公共版本的情况。所以,应该在做更新之前使用git pull
或git fetch
来获取最新的代码,这样可以尽量避免发生冲突。
3. 写清详细的提交信息
每一次提交都会有一个相应的提交信息,也叫日志信息。当做提交操作时,留下描述性的提交日志信息是很重要的。这些信息应该能够说明为什么做这次更改以及改动了什么。这些日志信息是这个项目开发中的规范历史记录,也有助于未来去追踪代码的贡献者。
4. 提交之前做代码检查(Review)
SCM
提供一个暂存区(staging area
)的功能,这个功能可以在提交之前收集相关的修改并整理暂存。它可以用来在提交之前检查即将提交的内容,用这种方法提供一种工作的缓冲,以此来帮助改进可能的提交内容。
5. 使用分支
分支功能是SCM
机制中一个强大而重要的功能,它可以帮助开发者建立一个相对于主干代码的独立工作线。分支功能很便捷和轻量级,应该被频繁高效的使用。它允许多个开发者并行的在各自独立的工作线上工作。这些独立的工作线很可能是软件的不同特性。当独立分支上的开发工作完成后,可以将分支内容合并(merge
)到主干分支上。
6. 认同工作流程
默认情况下,SCM
提供了非常自由和灵活的工作方法。所以,在一个团队内,建立统一的协作共享方式是非常重要的,比如建立合并分支的方法和过程。如果团队内部不认同统一的工作流,这可能会在合并分支时出现低效的协作。
总结
SCM
对于现代软件开发是异常重要的(原文中是无价的 invaluable
),很多优秀的软件团队在使用SCM
,你的团队同样也需要。SCM
非常易于部署在一个新工程中,并且其回报是非常大的。Atlassian
公司提供一些非常好用的SCM 集成开发工具,可以帮助你更好的上手。
Git菜单是一套高质量的 Git 中文教程,源于国外社区的优秀文章和个人实践。
本文原文可参见:https://github.com/P2Tree/git-recipes/blob/master/sources/1.2-%E6%BA%90%E4%BB%A3%E7%A0%81%E7%AE%A1%E7%90%86.md。
本教程全部内容可参见:https://github.com/P2Tree/git-recipes,我基于Zhongyi Tong的工作进行了重新整理和内容新增,由于作者已经关闭该项目,故重新建库,有任何建议和疑问欢迎评论或可在Github上创建issue。再次感谢原作者的辛勤劳动。