版本管理
前面已经提到了,非常有必要对开发的代码进行管理。那么进行版本管理到底什么时候使用呢?
我总结了使用版本管理的主要场景,有以下3种:
对于个人开发者,版本管理能记录开发的变迁。它记录了所有文档的修改记录,就好比玩游戏时,我们都会时刻存档,就怕哪一次不小心,控制的角色挂了;假如不存档,出了问题,必须得从新开始。
如果使用了版本管理,就可以随时保存文档修改的进度。一旦文档任何时候出现了问题,或者希望快速还原到之前某个特定的状态,都可以很容易的切换过去。省去了程序员不少麻烦,毕竟谁也记不清哪年哪月哪日我添加了一段什么代码,目的是什么,而正是这段代码引起了bug,搞得我现在大脑崩溃。
当多个程序员开发同一个项目的时候,版本管理工具能很好的协调彼此的工作,让大家开发的代码不会冲突、互相干扰,即使出现了问题,也能很快找到原因。
比如
程序员A
在他的开发代码中修改了work.java
中第15行的内容,同时程序员B
在他的开发代码中修改了work.java
中第20行的内容。两人把修改提交保存的时候,版本管理工具,会把两人的修改合并起来。如果
程序员A
在他的开发代码中修改了work.java
中第15行的内容,同时程序员B
在他的开发代码中也修改了work.java
中第15行的内容。两人把修改的内容提交保存的时候,版本管理工具,会发现两人的修改冲突,告诉A
和B
,让他们两协商解决问题。文档的修改积累到一定程度,比如说完成了设计的所有内容,就可以设置一个大的节点。后继的开发可以分成两支:一支继续添加新的功能;一支修复现有程序的bug。
管理的工具
为了满足前面提到使用场景,在软件开发的不同历史阶段,出现了不同的版本管理工具:从CVS
,到SVN
,再到现在使用最广泛的Git
。
早期的版本控制软件存在的各种缺点,都被后来的代替者解决了。在安卓的开发中,基本上都在使用Git
作为版本控制工具。
Git
是Linux
之父Linus Torvalds亲自开发的工具,有着高效的管理能力。它最为基本的运作思路大致如下:
仓库
Repository
是一个Git项目
的容器,里面存放着文档(包括代码)、以及各个文档的历史修改信息;仓库
Repository
可以存在于网络端,也可以存在于本地电脑当中;仓库有两种获取的方式,一个是clone网络端已有的;一个是在本地电脑上自行创建,再通过网络提供给别人访问;
假如对本地的仓库内容进行了修改,要保存修改进度的时候,
- 要先将这些修改放到stage当中,
- 然后提交-
commit
到本地的仓库中,此时会产生一个全局唯一识别码-Commit ID
,就像f27af79
; - 将
commit
后的内容推送push
到网络端,而这个Commit ID
就代表你这次提交的唯一标记; - 假如推送的时候,自己修改的代码和仓库中的代码出现了冲突
Conflit
(因为修改了同一处的代码导致),那么推送者就需要查看代码、找到修改这段代码的提交者商量修改方案,解决冲突;
其他开发者假如clone了这个仓库,就能看到
Commit
后的各种修改,并通过拉取pull
的操作从网络端把更新同步到自己本地的代码当中;假如同步代码的过程中,自己的代码和别人的修改发生了冲突
Conflit
,那么拉取者就需要查看代码、找到修改这段代码的提交者商量修改方案,解决冲突;
除此之外,Git还拥有软件工程方面的实用技巧,例如创建开发分支Branch
,给代码打标签Tag
。
更加详细的内容,可以参考这里。里面还列举出了各个平台下可以选择的图形化工具。
Github的使用
Github几乎是全世界程序员都知道的项目托管平台,我们可以把代码放在这个平台上。整个项目的托管就是基于Git
的原理实现的。
Github在Git
管理中充当着网络端的功能,扮演中心服务器的角色,让我们可以随时更新代码、提交代码,分享代码。
而Android Studio
具有对Github平台的原生支持,让我们在开发的时候能够无缝的加入对软件版本控制的管理功能。
Github的注册
打开Github的官网,按照指示很容易的注册一个账号。
登陆账号后,可以看到你现在具有的仓库-Repository
,
我之前已经创建过几个免费仓库了,所以列表里会将它们呈现出来。如果是新注册的账号,这里应该是空的。
Android Studio的配置
现在我们来把之前创建的天气预报
工程,托管到Github上:
- 启动
工具栏
的VCS -> Import into Version Control -> Share Project on Github
; - 在弹出的窗口中,根据提示输入Github上的账户名和密码;
- 输入项目的名称
WeatherApp
和项目描述,选择Share
;
- 确认要添加到管理中的文件(代码、配置、资源等文件),并给这次提交添加描述信息;
刷新Github上的个人主页,可以看到新添加的项目仓库WeatherApp
已经出现在那里了,
此时看看Android Studio
的Version Control窗口
,就能看到当前的代码管理情况,
Android Studio的Git管理
提交与推送入库
Git版本管理有很多用法,这里我们先介绍两个最常使用的功能commit
与push
。
假如我们修改了WeatherApp
的MainActivity.java
,
LocalChanges选项卡
会将当前发生了变化的、被版本管理记录的文件列出来,
点击提交commit
按钮,会将修改过的文件放入stage状态,
并展示当前要提交commit
文件的状态,让我们再次确认。当我们点击被修改过的文档时,Android Studio
会为我们展示当前修改后的文档与修改前的文档有哪些异同。让我们在最后提交之前,再次检查确认一次,
检查无误后,选择提交并推送入库-Commit and Push
,
假如没有冲突发生,就能看到提交成功,版本控制增加新的节点,
Github上项目对应的代码页,也会更新,
其他
Android Studio
还提供了创建分支Branch
、创建标签Tag
、以及在不同节点上来回切换的功能,这里就不详细描述了。
因为这些内容如果没有实际的例子,讲起来会很枯燥。我会在开发的过程中根据需要穿插进响应的内容,这样大家理解起来就会非常的方便了。
本文是《从设计到实现-手把手教你做android应用开发》系列文档中的一篇。感谢您的阅读和反馈,对本文有任何的意见和建议请留言,我都会尽量一一回复。
如果您觉得本文对你有帮助,请推荐给更多的朋友;或者加入我们的QQ群348702074和更多的小伙伴一起讨论;也希望大家能给我出出主意,让这些文档能讲的更好,能最大化的帮助到希望学习开发的伙伴们。
除了CSDN发布的文章,本系列最新的文章将会首先发布到我的专属博客book.anddle.com。大家可以去那里先睹为快。
同时也欢迎您光顾我们在淘宝的网店安豆的杂货铺。店中的积木可以搭配成智能LED灯,相关的配套文档也可以在这里看到。
这些相关硬件都由我们为您把关购买,为大家节省选择的精力与时间。同时也感谢大家对我们这些码农的支持。
最后再次感谢各位读者对安豆
的支持,谢谢:)