摘要:
在这篇文章里面你将看到Android Studio开发工具搭配VirtualSVN Server、TortoiseSVN如何使用,如何提交项目到仓库(包括删除项目文件或文件夹需要注意的问题),如何从仓库更新代码到本地,如何给项目源码开设分支(包括开设分支需要注意的问题),如何合并多个分支内容以及如何解决Android Studio提交项目源码遇到的常见错误。
一、Android Studio搭配VirtualSVN Server、TortoiseSVN的简单使用
在上一篇文章里,钊林介绍了VirtualSVN Server与TortoiseSVN的简单使用,Android Studio开发工具的VCS菜单中提供了几款管理项目源码的版本控制工具,其中包括常用的GitHub、Git和Subversion,其中Subversion即是我们将要学习的子版本控制工具(学习前默认当前电脑已安装TortoiseSVN客户端),如下图:

在学习subversion之前,笔者创建了一个名为新的项目(项目名称TestApplication),并且将项目导入VirtualSVN Server创建的仓库中(仓库名称92Recycle),如下图:


在笔者的仓库中,创建的时候默认包含trunk、branches和tags三个目录结构,为什么会默认创建上述三个目录文件夹以及每个个文件夹有什么作用,钊林将在介绍如何给项目源码开设分支的时候讲到,现在我们将项目源码导入trunk目录即可,如下图:

1.1 将项目源码导入仓库的三种方式:
第一种方式:在上一篇介绍TortoiseSVN简单使用的文章中,钊林介绍了TortoiseSVN的Import功能,在本地找到需要导入仓库的项目,鼠标右键,选择TortoiseSVN——>Import,如下图:

注意,这种方式导入仓库后的项目,需要执行SVN Checkout命令,将仓库里的项目下载到本地,这样才实现版本控制,下载到本地的项目文件夹显示绿色图标。

第二种方式:在Android Studio中点击菜单VCS——>Import into Subversion,如下图:
然后输入仓库地址,如下图:

选择当前需要导入项目的根路径,如下图:

输入描述内容,如下图:

执行到这一步后,可能会通常Authentication Required的弹窗,如下图:

钊林的做法是,先取消上述操作,点击菜单栏File->Settings——>Version Control——>Subversion,在右边面板中,点击按钮Clear Auth Cache,清除认证缓存,然后重新执行上述操作,如下图:

同样,第二种方式导入仓库的源码,还没有实现版本控制,除了执行checkout之外,还需要点击File——>Settings——>Version Control进入设置面板,选择版本控制的系统,如下图:

第三种方式:和第一种方式差不多,只不过我们选择的是菜单VCS——>Share Project(Subversion),如下图:

Share Project(Subversion)选项默认将当前整个项目,导入指定地址的仓库,如下图:

如果输入的路径包含仓库名称,我们选择第一个,另外两个选项默认会将当前项目名称作为仓库名称,自动创建(后两个选项的区别,介绍分支的时候再详细说明),如下图:

第三种方式,不需要执行checkout命令,同时也不需要进入设置面板选择版本控制系统,更加方便,推荐使用(同理,将项目源码分享到GitHub一样适用)
1.2 实现版本控制的文件或文件夹的几种状态
实现版本控制后,本地文件和文件夹与仓库中的文件或文件夹进行了关联,对文件或文件夹执行的操作包括:modified、added、deleted,以及none-versioned、versioned,Android Studio开发工具中,为了便于开发者区分文件或文件夹的状态,使用不同的颜色表示:
-
versioned,即处于同步状态的文件或文件夹,用白色表示
-
non-versioned,即没有添加到版本控制系统中的文件或文件夹,用橙色(或红色)表示,如下图:
-
modified,即修改了本地文件或文件夹,还没有同步到仓库,用浅蓝色表示,如下图:
-
added,即将non-versioned状态的文件或文件夹变成添加状态,选中需要添加的文件,右键Subversion——>Add to VCS,用绿色表示,如下图:
-
deleted,即删除状态的文件或文件夹,在Android Studio开发工具看不到它们的状态,但可以被记录下来
选中橙色的、蓝色的或绿色的文件后,执行Subversion->Commit File提交到仓库,实现本地项目源码和仓库项目源码的同步,需要注意如下两个问题:
non-versioned状态的文件或文件夹,首先需要执行Subversion->Add to CVS,变成Added状态- 执行
Subversion->Commit File检查的是modified、added状态的文件或文件夹 deleted状态,包含两种情况:(1)只删除本地文件,(2)同时删除本地文件和仓库文件(容易造成冲突)。
二、Android Studio如何从仓库更新代码到本地?
打开Android Studio,此时如果已经加载项目,然后点击菜单File->Close Project关闭当前打开的项目,出现如下界面:

然后,输入完整的仓库地址,比如:https://192.168.11.128/svn/92Recycle
之后,Android Studio自动checkout整个项目,并在Android Studio中打开。
这里需要注意一个问题:
如果仓库中备份的只是项目中的一个module,使用上述方法下载的源码打开后,显示不是一个完整的项目。
正确的做法:在本地通过鼠标右键SVN Checkout下载module源码到本地,然后新建一个Android Studio项目,再把module放置根目录下(具体看项目提交仓库的情况)。
三、Android Studio如何给项目源码开设分支?
为什么需要开设分支,开设分支有什么作用呢?为什么会在仓库底下通常包含trunk、tags和branches三个文件夹,它们分别有什么作用?
开设分支的目的,方便管理多个版本,比如:有程序员A,负责在主干中添加新功能;有程序员B,负责在分支中修复发现的bug,程序员A和程序员B维护着各自的版本,一个是主干(主干也属于一个分支),一个是分支,一个分支就相当于一个副本,程序员A和程序员B各自在独立的项目中添加或删除代码,最终视具体情况决定是否合并彼此修改的代码,达到协同工作的目的。
典型的仓库目录结构包含trunk、tags和branches三个文件夹,钊林的理解是trunk文件夹通常作为主干,tags文件夹通常作为备份已发布的新版本(不允许切换到该文件夹修改代码),branches文件夹通常作为修复新版本发现的bug(该副本来自于tags文件夹)
在前面讲到的项目TestApplication里面,钊林将项目导入了trunk文件夹,然后在本地完成了版本1.0的开发,并且将版本1.0上线,这个时候需要将trunk文件夹内的项目源码打一个副本release-1.0,然后保存到tags文件夹,开设分支的步骤:
- 将本地修改或添加的代码全部提交到仓库
- 将仓库源码打一个副本
release-1.0到tags文件夹,执行命令Subversion->Branch Or Tag,如下图:
- 于是,在
tags/release_1.0文件夹内保存着版本1.0的副本,如下图:
- 程序员A可以继续在主干进行新功能的开发
- 上线的版本1.0发现了一个致命的bug,这时程序员B首先将本地修改的代码提交到
trunk目录,然后切换到release_1.0目录,最后将版本1.0打一个副本到branches目录,切换目录如下图:
- 打一个副本,重新执行上述第二步,执行命令
Subversion->Branch Or Tag,这次目录路径选择branches文件,源路径为tags/release_1.0,如下图:
- 程序员B切换目录
branches/release_1.0_bug,开始bug的修改 - 最后将
release_1.0_bug修改的代码合并到主干,执行命令Subversion->Integrate Directory,如下图:
- 合并分支,解决合并文件存在的冲突,如下图:

- 发布新版本1.1,重复上述的步骤,最终
tags文件夹内包含着每一个正式版的副本(多个副本),branches文件夹包含修改版本的副本(多个副本),trunk文件夹只包含一个主干
四、SVN分支管理流程
点击项目,右键Subversion->Branch or Tag打开分支管理面板,如下图:
Copy From表示创建分支的源,Copy To表示创建分支的目的地
创建分支的过程,简单地理解就是从哪里复制一份源码,保存到哪里去,复制的源可以是本地路径的源码,可以是仓库路径的源码
目的地,选择复制源码保存在仓库的位置,选择选项Branch or Tag,输入Base URL,输入新分支的名字
钊林当前的项目是51Recycle,已经创建了分支2.0、2.0.3、2.0.4,如下图:
分支的含义,就是对当前新版做一个备份,开发者依然在主版本1.0添加新的功能,修改出现的bug。
在创建分支的时候,出现Authentication Required,如果你使用的是HTTPS,还要求指定证书路径Path to certificate和证书口令Certificate passphrase
第一种解决办法:
打开面板File——>Settings——>Version COntrol——>Subversion,点击Clear Auth Cache清除认证缓存,重新创建分支,重新弹出Authentication Requested窗口,要求输入User name和Password,即SVN仓库分配的账号、密码,如下图:
之后,弹出Examine Server Certificate窗口,记得必须点击Accept,点击Accept TemporaryorReject都会导致分支创建失败,如下图:
五、四、Android Studio提交项目遇到的常见错误
cannot run program "svn" (in directory "..."):CreateProcess error=2,系统找不到指定的文件

原因:Android Studio开发工具找不到svn.exe客户端程序
解决:检查当前电脑是否安装TortoiseSVN或VirtualSVN客户端,打开安装的目录,找到svn.exe执行程序,配置如下:

Commit failed with error svn:E200007

原因:unknown
解决:unknown
Branches load error: Server SSL certificate rejected
原因:仓库地址使用了HTTPS加密,需要仓库管理员提供对应证书和口令
解决:打开面板File——>Settings——>Version COntrol——>Subversion,点击Clear Auth Cache清除认证缓存,重新创建分支,重新弹出Authentication Requested窗口,要求输入User name和Password,即SVN仓库分配的账号、密码,如下图:
之后,弹出Examine Server Certificate窗口,记得必须点击Accept,点击Accept TemporaryorReject都会导致分支创建失败,如下图:
Error:Error:svn: E155015: Aborting commit:...workspace.xml' remains in conflict
原因:当前项目某个文件与窗口文件冲突
解决:在Android Studio找到冲突的文件,右键Subversion——>Mark resolved标记为以处理,重新提交源码
总结:
通过这篇文章,读者懂得怎么在Android Studio开发工具使用版本控制系统Subversion或Git、GitHub,以及怎么管理分支,怎么解决常见的合并分支错误,重点理解分支管理的思想,学会多个开发者协同工作。
当前文章价值9.49元,扫一扫支付后添加微信提供帮助!(如不能解决您的问题,可以申请退款)
