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/

回到过去美好的时光——源代码版本管理Always Use source code Control的更多相关文章

  1. 源代码版本管理与项目管理软件的认识与github的注册

    源代码版本管理软件: 主要有:svn,cvs,hg,git,VSS 这些工具主要是一种记录代码更改历史, 可以无限回溯, 用于代码管理,多个程序员开发协作的工具.Perforce,StarTeam)- ...

  2. VS2017源代码版本管理

    VS2017源代码版本管理有两种方式:Git(代码提交到服务器)和Team Foundation Server(代码提交到局域网) 一.Git版本管理(上传到码云服务器https://gitee.co ...

  3. source code analyzer 功能强大的C/C++源代码分析软件 Celerity CRACK 破解版

    特色 迅捷是一个功能强大的C/C++源代码分析软件.可以处理数百万行的源程序代码.支持标准及K&R风格的C/C++.对每一个打开的源代码工程,通过建立一个包含丰富交叉引用关系的数据库,显示其所 ...

  4. C#调试含有源代码的动态链接库遇见there is no source code available for the current location提示时的解决方案

    C#调试含有源代码的动态链接库遇见there is no source code available for the current location提示时的解决方案: 1.首先试最常规的方法:Cle ...

  5. Maven下载依赖项的源代码(source code)和Javadoc

    Maven 默认只下载依赖项本身的 jar 文件,不下载源代码和 Javadoc.如此固然工程的体积是最小的,但在开发者不熟悉依赖的对象时,需要查找源代码中的方法定义和说明. 这时我们需要使用一条 M ...

  6. Tools - 源代码阅读分析工具Source Insight

    简介 https://www.sourceinsight.com/ Source Insight是一个面向项目开发的程序编辑器和代码浏览器,可以分析C/C++.C#.Java.Python等语言源代码 ...

  7. 第四代增强 源代码增强(ABAP Source Code Enhancements)

    显式代码增强的创建 se38打开你要增强的程序 进入编辑状态 在菜单栏选择: Edit->Enhancement Opreations->Create option. 此时弹出Create ...

  8. 20155202 2016-2017-2 《Java程序设计》第1周学习总结

    20155202 2016-2017-2 <Java程序设计>第1周学习总结 考核方式于成绩构成 100分构成  翻转课堂考核12次(5*12 = 60):每次考试20-30道题目,考试 ...

  9. UML基础与Rose建模实训教程

    目  录 第1章  初识UML. 1 1.1 初识UML用例图... 1 1.2 初识UML类图... 3 第2章  Rational Rose工具... 6 2.1 安装与配置Rational Ro ...

随机推荐

  1. C#的变迁史 - C# 5.0 之调用信息增强篇

    Caller Information CallerInformation是一个简单的新特性,包括三个新引入的Attribute,使用它们可以用来获取方法调用者的信息, 这三个Attribute在Sys ...

  2. ASP.NET防御XSS跨站攻击

    目前做ASP.NET项目的时候就有遇到过“用户代码未处理HttpRequestValidationException:从客户端***中检测到有潜在危险的 Request.Form/Request.Qu ...

  3. webapi+entityframework分享

    1. webapi允许跨域的增删改查要在web.config中加入以下文字 <system.webServer> <validation validateIntegratedMode ...

  4. JAVA实现的微信扫描二维码支付

    吐槽一下 支付项目采用springMvc+Dubbo架构实现,只对外提供接口. 话说,为什么微信支付比支付宝来的晚了那么一点,一句话,那一阵挺忙的,然后就没有时间整理,最近做完支付宝支付,顺便也把微信 ...

  5. 阿里云centos6.5下搭建javaWeb运行环境

    一.主要方法 http://blog.csdn.net/hdfyq/article/details/38456981 上面文章的步骤至mysql安装完毕以及设置(记住 update user set ...

  6. Python 3 利用 subprocess 实现管道( pipe )交互操作读/写通信

    这里我们用Windows下的shell来举例: from subprocess import * #因为是举例,就全部导入了 为了方便你理解,我们用一个很简单的一段代码来说明: 可以看见我们利用Pop ...

  7. 树链剖分求LCA

    树链剖分中各种数组的作用: siz[]数组,用来保存以x为根的子树节点个数 top[]数组,用来保存当前节点的所在链的顶端节点 son[]数组,用来保存重儿子 dep[]数组,用来保存当前节点的深度 ...

  8. python学习笔记4(文件操作)

    文件操作: 1.f=open(”caidan”,”w”,encoding=”utf8”)      直接打开一个文件,如果文件不存在则创建文件 f.close() 2.with open (”caid ...

  9. MySQL配置文件mysql.ini参数详解、MySQL性能优化

    my.ini(Linux系统下是my.cnf),当mysql服务器启动时它会读取这个文件,设置相关的运行环境参数. my.ini分为两块:Client Section和Server Section.  ...

  10. [小北De编程手记] : Lesson 02 玩转 xUnit.Net 之 基本UnitTest & 数据驱动

    关于<玩转 xUnit.Net>系列文章,我想跟大家分享的不是简单的运行一下测试用例或是介绍一下标签怎么使用(这样的文章网上很多).上一篇<Lesson 01 玩转 xUnit.Ne ...