Don’t Repeat Yourself
Don’t Repeat Yourself,这是程序员修炼之道中的经典名言。源代码版本管理对程序员来说是非常重要的工作。因为它让你能够回到过去,而不用做重复的工作。比调试代码更令人痛苦的是你回不到你之前的版本的状态,而且你也记不得到底修改了哪些地方,源代码版本控制工具就是干这工作的,把琐碎的事交给计算机,它比你在这方面更靠谱。版本管理不仅是技术,更是一种理念。如果代码都管理不好,更别说管理人了。即使是一个人开发的项目也需要版本控制。源代码版本控制系统或资源管理系统是现代软件开发的一个重要方面。不使用版本控制系统就如同超速驾驶一辆汽车:很刺激,也可能会更快抵达目的地,但事故却在所难免。但通常的情况是稍具规模的工程,你不可能一次成型。
常用的源代码版本控制工具有Git, SVN ,CVS等。Linux内核开发采用git版本控制工具,所以在开源社区最为广泛的是git版本管理软件。在github 代码托管网站上的项目无一例外地采用git。FPGA和ASIC前端开发和软件的开发方式越来越相似,所以,FPGA和ASIC前端的开发都采用软件的管理方式。我目前的需求是知道应用SVN和git 管理里Verilog和SystemVerilog代码。
SVN
Subversion —— 一种开放源码、多用户版本控制系统,支持非 ASCII 文本和二进制数据。SVN通常有三个文件夹:branches、tags 和 trunk。Branches 文件夹用于试验。Tags 通常标识较老的、已发布的软件版本。而大多数时候在主分支trunk上工作(CVS 称之为 HEAD).
Subversion 的命令示例
# Create a new repository
svnadmin create /home/user/new_repository
# Check out a sandbox from the central repository
svn checkout file:///server/svn/existing_repository new_repository
# Update a local sandbox from the central repository
svn update
# Check in changes from the local sandbox to the central repository
svn commit
# Add new files to the local sandbox (need to be committed)
svn add <file/subdirectory>
# Show changes made in the local sandbox
svn diff
# Rename a file in the local sandbox (requires commit to the repository)
svn rename <old_file> <new_file>
# Remove files (also removed from repository, requires commit)
svn delete <file/subdirectory>
Git
Git 是一个开源的分布式版本控制软件。相对于 CVS、SVN 等主流版本控制软件,Git 的学习成本甚至会更高。常用的git命令如下。
git clone
git add –A
git commit –a
git checkout master
git pull
git push
git merge dev
总之,无论使用何种源代码控制工具或者软件配置管理(Software Configuration Management,SCM),都会获得一些普遍的收益。如果使用一种工具后效率极高,那就使用这种工具吧! 解决问题才是王道。SCM 是软件开发中的必需工具,能激发团队之间的激情。
参考文献:
[1] Linux 的版本控制. https://www.ibm.com/developerworks/cn/linux/l-vercon/
[2] 开源分布式版本控制工具 —— Git 之旅.
http://www.ibm.com/developerworks/cn/opensource/os-cn-tourofgit/