2:Android开发之路工具篇:版本控制工具(SVN)
一:简介
由于最近工作有点忙,加上之前又没有用过Git,为了写Git的文章,查了不少资料,花费了很长时间。所以最近更新的有点慢。最近又把AS升到了3.3,发现和2.0+有很大的区别,后面如果有时间出一期来介绍一下吧。今天这一期主要介绍版本控制。版本控制工具对每个开发人员最为熟悉不过了,它是软件开发者的必备工具,它维护了成员代码的安全,方便的协调各个成员的开发。android开发常用的版本控制工具分为两类:SVN和Git。
二:SVN(这里以mac系统为例,后文会介绍windows下的区别)
1:svn的下载及安装
mac系统自带有svn,但是需要我们下载xcode,打开termial,输入svnserve -- version可以查看svn安装的版本号信息。
可以看出已经安装好了svn了。我们看一下android studio 如何配置svn。
2:svn的配置流程
1:查看svn的安装路径。whereis svn 或者which svn
2:配置命令行comand-line(这里mac系统和windows系统不同,xcode已经自带有comandline,而windows系统没有comandline因此再下载的时候要注意勾选上。)
3:根据以上从terminal获取的路径或者是svn安装的路径就可以在as中进行配置:
4:在这里有两种操作方式:1:从已有的svn地址中检出项目;2:将已有的项目提交到svn中。
4.1.1:先说从已有的svn中检出项目
可以从项目管理的面板上进行操作也可以从VCS中选择如图
或者
4.1.2 添加导入svn的地址
点击ok,输入用户名及密码。
4.1.3 配置svn检出路径:
在这里有三个标签:
branches:即分支,它是对开发周期中的单独生命线作单独的修改,常常用来做添加功能及产品发布后的bug修复。这样做既不影响产品开发线及编译错误,当有新功能我们又可以将其合并到主干中。其实它就是用来做并行开发的。
trunk:主干。它是用来做主方向上的开发。
tags:标签。用于项目开发中的里程碑,是一个只读的,比较稳定的版本。这就意味着版本是否发布tags上的版本都可运行。它将在branches上修改的bug的代码合并到trunk上时创建的一个版本标识,以后braches上修改的代码再合并到trunk上时就从tags的version到braches最新的version合并到trunk。
这里选择的意思是让你选择解析的文件,是解析整个项目还是选择解析文件夹下的子文件。在这里分支和标签下并没有文件,选择解析分支。一般选择解析整个目录。
选择项目存储的路径之后。弹出如下窗口:
4.1.4 配置svn检出参数
在这个窗口里:
Destination:目标地址目录有四个选项表明的是选择项目存放的路径。
Update/Switch to revision: 意思是选择更新/回滚操作。HEAD表示的是最新版本,Specified指定版本。
Depth:设置的是检出项目的层级深度,这里有四个选项:
empty:只包含目录自身,不包含目录下的任何文件和子目录。
files: 包含目录和目录下的文件,不包含子目录。
immediates: 包含目录和目录下的文件及子目录。但不对子目录递归。
infinity: 这是默认的,包含整个目录树。
默认的是infinity,我们不需要进行更改。
这个窗口中底部还有个复选框:官方文档的解释是(Select this checkbox to have externals included in the working copy.)选中这个复选框包含外部工作副本。默认勾选。
4.1.5 配置svn格式化版本
选择高的版本一般不会出现什么问题。这样完整的项目就检出到本地了。
在这里可能会出现工具栏没有更新和提交的按钮这是因为你的项目没有选择svn作为版本控制工具。
可以进行如下操作:
或者 在.idea 文件夹下也可以进行更改。
4.1.6:添加忽略文件:
因为每个人的as的配置不同,比如gradle版本不同,有些文件的保存信息不同,还有一些配置信息,这些都不需要提交到svn上,避免带来因版本不同而导致的麻烦。
as上一般的忽略文件及文件夹分别是:
所有的build文件夹(包括module中的build文件夹),
.gradle文件夹,
.ideal文件夹
所有的.iml文件
还有一个local.properties文件。
4.1.7 查看历史版本信息、更新和提交操作:
查看已关联svn版本库的内容:
查看已提交到svn的日志记录,
为了避免项目提交的冲突,先进行更新操作再进行提交。
更新操作界面
这里直接点击ok就行了。
提交界面
Auto-update after commit :自动升级后提交
keep files locked :把文件锁上,我想这应该就只能你修改其他开发人不能修改不了的功能
在你提交之前:before commit
Reformat code:重新格式化代码
Rearrange code:重新整理代码
Optimize imports:优化导入
Perform code analysis:执行代码分析[ 默认选择]
Check TODO(show all):检测需要修改的代码[显示所有默认选择]
clean up: 清除所有
Update copyright:更新版权
4.2创建已有的项目提交到svn中去
前面介绍的是从svn中如何检出项目,接下来介绍如何将创建已有的项目提交到svn中去。
在提交svn之前一定要先进行添加忽略文件,具体步骤见前面的步骤。将已有的文件关联到svn上有两种方式,一类是import into subversion 另一种是Share project(Subversion)。
这两种方式的区别在于:
Share Project(SubVersion)这个选项只是对本地项目同SVN进行了关联操作,并没有将代码提交,需要完成连接后在进行提交代码操作;而Import into Subversion这个选项只是将你的svn项目提交到了svn服务器上,本地项目并没有同svn建立起关联,执行完你会发现所有的工程文件都变成了红色,而且在要提交到SVN服务器时会提示项目不是SVN下的工作副本,无法提交,如果想提交成功,你需要删除当前项目,重新从svn上导入后便可提交成功,虽然两种方式均可,但是建议采用Share Project(SubVersion)的方式。本文也采用Share Project(SubVersion)方式提交;
第一个选项是直接将整个文件都放到trunk文件夹下,第三个在项目文件夹下有创建了一个trunk文件夹,因此建议使用第二种方式;选择完成后点击Share就可以了,会弹出让你选择SVN工作副本的格式化版本(jdk版本)。之后就是add—commit 操作,这里比较简单,不做赘述了。
4.3、svn分支开发:
1:为什么要进行分支开发?
一般,我们的开发都是基于trunk进行开发的。当一个版本开发完成之后,进行发布这个版本1.0,打tag进行保存。此时又有新的需求叠加进来,我们在trunk上进行2.0的开发。但是第一个版本经过测试发现有许多bug要进行修复,需要在上个版本(1.0版本)上进行改动。因此需要进行并行开发,所以我们应该基于发行版相应的tag,做相应的分支(branch)进行开发。这就是引入分支开发的缘由。
1.0版本的目录结构为:
project:
|
+-trunk
+-branches
+-tags
+tag_release_1.0 (copy from trunk)
2.0 版本的目录结构为:
project:
+trunk/ ( dev 2.0 )
+branches/
+dev_1.0_bugfix (copy from tag/release_1.0)
+tags/
+release_1.0 (copy from trunk)
1.0的bug修复完成后,等到合适的时候就可merge到trunk上。
2:操作步骤
在这里我创建了一个项目svndemo,具体操作分三步:1、创建分支
2、切换分支。3、分支的合并。
2.1:创建分支:从主干中创建分支保存到tags(标签)中:
在这里我们从svn 主干中copy分支,之后将分支保存到tags中,注意切换分支保存的路径。
2.2:切换分支:切换到tags分支,从tags中copy一个分支作为一个bugfix分支。
切换分支点击Update,选择切换特定的路径即可。
copy分支方法同上,不做赘述。切换到branches上进行bugs的修复即可。
3:分支的合并。
注意:从项目源2合并到项目源1中去,但是项目源1的内容会被2覆盖。
这里根据业务逻辑进行合并。
三、svn操作所注意的事项:
一: svn提交冲突
1、XX.java.mine是修改后准备提交的那个版本;
2、xx.java.r320是初始版本;
3、xx.java.r3280是别人赶在你之前提交的那个版本;
合并之后右击resolve text confilct
二:注释引起的提交错误
1、svn 方法注释中的参数名不能包含系统自带的变量名,方法注释参数名要与方法中的实际参数名要保持一致。
2、类的注释名尽量使用英文注释,尽管提交不会出现错误,但是会有警告提示。
3、检出项目会弹出path to certificate框,这时首先检查导入svn的路径、用户名、密码是否正确。确认无误后,清空svn使用缓存(会清空密码信息)操作如下:
也可以采用如下方式用户信息:
找到上图中 Use custom configuration directory 路径中的文件,查看作者信息,删除,重新生成即可。
4、项目更新操作会总是弹出如下对话框:
意思是:是否将以下文件添加到svn中。看文件类型选择是否点击添加,这里是trunk.iml
配置文件不需要添加。当然有时还会弹出是否从svn库中删除文件的对话框,视情况而定。
5、https 请求证书错误:
使用https请求,可能会报证书错误。如下:
解决办法:
打开terminal终端输入svnsync synchronize 你的svn地址
接着输入密码即可,操作如下:
注意这里提示svn库没有完成初始化工作。不过没关系,svn已经和本地建立连接了。
参考:
IIntelliJ IDEA 官方文档:
http://www.jetbrains.com/help/idea/subversion-reference.html