u-boot移植随笔:使用svn进行版本控制

来源:互联网 发布:mac 带bar 知乎 编辑:程序博客网 时间:2024/04/29 07:08

当年做毕业设计时,一时想不开,竟然使用cvs对写的代码进行版本控制,——当研究有一点心得时,只能跟一两个人讨论,这不能不说是我的悲哀。

这几天u-boot没搞什么,都是在研究源代码,已经有一些心得了,但不好用语言表达出来。有些代码的妙处,只能意会,不能言传。

其实很久我就意识到版本控制的好处及作用,只是周边环境不谈这个,只好自己偷偷地一个人研究了。

目前主要用svn来控制了,svn与cvs虽说有那么一点渊源,但两者所涉及的概念有很多又不一样,使用时最好分清楚,弄明白一些好。

版本控制常用功能无非就三个:导入、检出、(修改、)提交,用术语来讲就是import、checkout、(modify、)commit。

刚开始在百度上搜索“svn使用入门”、“svn基本使用”,但得到很多没什么用的信息,而且网上到处乱转载,都不知哪个是原创,哪个是转载。还好,我找到svn中文网站,看到里面翻译的中文手册,花了一两天时间研究,才有点理清楚这个东西。所以说,很多东西,官方手册才是正宗的(然而许多人十分不愿意去看手册,那些datasheet啊,man啊,看一下也不干)。

 

本次进行版本控制,主要是在本地测试(本地就满足需要,不需要额外的服务器),并且系统中已经安装有了svn——网上许多安装svn的教程以及启动服务、用户、密码,很多,但本文不提及,因为实际中就没有这么做。

 

1、建立代码仓库(即repository):

$svnadmin create ~/svn_repos

在home目录下创建代码仓库svn_repos,这个是我的习惯,所有工作、代码都由自己的home目录开始,原则上任意目录都是可以的——只要有权限。

 

2、导入工程

$svn import u-boot file:///path/svn_repos/u-boot/trunk -m "sth" (path是指代码仓库路径,file表示本地,后面有三个“/”)

将u-boot工程(目录)导入到svn_repos里,放到该目录的u-boot下的trunk目录,-m是必须的,后面是导入的信息

这里注意一下svn推荐代码目录位置:一般在svn_repos下建立工程目录,还要在工程目录下建立trunk、branches、tags目录(像tags等等要使用svn mkdir path/tags来创建),当然,不这样做也可以。

 

3、checkout工程

$svn co file:///path/svn_repos/u-boot/trunk u-boot

只要checkout出来的工程才能进行版本控制,所以在进行之前,必须checkout出来,u-boot表示checkout的目录。注意,如果在同一目录同时进行2、3步肯定会出错的,这时只要删除原来的目录或者在其它目录进行操作就可以了。

 

4、修改

这个不用说,就是进行coding了,包括添加目录(文件)、删除目录(文件)、修改代码,等等。

 

5、提交

$svn ci file -m "sth"

这里假设是在u-boot工程中进行操作,可以指定file,也可以不指定file,-m表示此次提交的信息,这里就不需要指定仓库的路径了。

 

6、做标签(快照)

$svn copy file:///path/.../u-boot/trunk file:///path/.../u-boot/tags/release-1.0 -m "sth"

将当前版本作一标签,放到tags目录下,标签名为release-1.0。因为记版本号是无意义很枯燥的事情,比如,将版本3398作一标签,名为release-1.0,后者明示比前者好记很多。

在移植u-boot的过程中,我就作了很多标签,比如完成NOR FLash移植后,标签名为u-boot-1.0_nor,完成DM9000驱动后,标签记为u-boot-1.0_dm9000,至于它们的版本到底是多少号,不用理它,记住这个标签名就行,到时checkout的时使用标签名就可以了。

 

若要导出干净的工程目录,即不带任何版本信息的工程,可以使用svn export file:///path/..../u-boot命令。

 

这里再介绍多几个常用命令,更具体的参照手册,这里是地址:http://www.subversion.org.cn/svnbook/1.4/index.html

 

svn add file(dir):添加文件(目录),如果是目录的话,递归添加。添加新文件到原来已有版本控制的工程中,在提交之前必须进行这个操作,只有这样,svn才知道你添加了新文件。

 

svn rm(delete) file(dir):删除,意义同上。

 

svn log file:查看文件日志。

 

svn update:更新当前目录,比如你提交后,就可以update一下。

 

svn copy file1 file2:复制,目录也行。

 

svn move file1 file2:重命名,目录也可以。

 

svn mkdir path/dir:创建目录,上面那个tags就要这样创建了,后面要加-m "sth"选项

 

svn status:查看文件状态,后面可跟文件,该命令会列出所有修改(添加、删除)过的目录,几个常用的标志如下:

                   ?:工程目录中存在,但仓库中找不到(进行svn add就OK了)。

                    M:修改过了的。

                    A:添加了的,就是svn已经知道你添加了这个文件(目录)了。

                    D:删除了的。

 svn revert:取消本地的修改,提前是还没有提交到仓库中。

 

没有了,我就知道这么多了。

 

感谢那些为开源做出贡献的战士们!向你们致敬!

原创粉丝点击