本文主要介绍如何在Andriod Studio使用Git来进行本地版本控制,不涉及远端仓库(github、gitee),但只要理解了如何在本地管理,远端仓库对你来说就很简单了。
下载地址: Git - Downloads
打开后根据自己的操作系统进入,也可以直接点击右侧电脑屏幕下载,会自动判断操作系统。
然后点击下载最新版本,可能会有点慢,多刷新几次,或者科学上网。
下载完成后就是无脑下一步,也可以更改安装位置,下图选项也可以勾上,会创建桌面快捷方式。
如果你的开始中出现了Git即代表安装成功,同时对任意文件右键也会出现Git相关选项。
首先新建一个项目,模板命名都无所谓,不是此处重点。
然后需要创建仓库,点击VCS的Enable Version Control Integration。
需要选择一种VCS,选择Git,然后OK
如果出现如下界面,是因为没有按照默认位置安装Git,默认路径找不到,需要重新配置,点击Configure。
在弹出界面重新设置路径,点击OK即可,仓库就创建成功了。
以上都是GUI帮助我们完成底层创建,如果想使用命令行实现可以点击Terminal,用命令行来操作Git,相关指令可以自行百度,网上很全。
同时Android Studio底部也会出现Version Control。
此时Version Control的Unversioned Files中的文件表示这些文件都没有添加到Git仓库,点击左侧对勾。
这里需要勾选你想要保存的文件,我这就全选了,下方代码的绿色背景表示这些代码都是新添加的,原来的仓库不存在这些代码,这里的Commit Message因为是演示所以就随便写了,真实项目有自己的书写规范,这里还需要将右侧的对勾取消掉,即不对代码做任何检查,然后点击commit。
如果第一次使用Git会弹出输入用户名和E-mail,下面的对勾如果选中的话,以后的项目都会默认用此用户名作为作者,输入后点击Set and Commit即可。
如果想要修改,按如下路径找到.gitconfig文件(86186为用户名每个人都不一样)然后记事本打开即可修改。
这里就需要介绍Git的一大特点,即分支管理,一个分支就相当一个单链表,每个节点就是一个版本快照,我们可以通过切换头指针指向的节点来实现版本控制。每个项目都有一个master分支,我们对项目进行开发和修改时一般不在此分支上进行,而是新建一个开发分支来进行,当完成一个新功能后就将开发分支的最后一个节点和master分支的最后一个节点合并,这样就实现了一次更新。
以上步骤可以简化为一下三步:
1.创建开发分支
2.在开发分支上完成新功能
3.将开发分支和主分支合并
下面就来实际操作一下:
Version Control的log中可以看到进行的Git操作,init为刚才输入的Commit Message,第一条分支名默认为maser,因为只有当前一个版本所以头结点就是这个版本,类似单链表。
创建新分支:在Version Control中右键点击New Branch。
输入分支名即可,我这里新建了一个dev分支。
此时可以对项目进行一些修改,我这里简单修改了一下布局
此时已经识别到改变,点击左侧对勾进行提交,
写一些提交信息,可以包括新增功能或修复哪些bug之类,尽量详细一些,对后续有帮助。
可以看到此时头结点为修改后节点,分支为新创建dev分支
如果在修改时忘了一些要修改的内容,同时还不想再创建一个节点,可以使用修订
我这里对布局又进行了一些修改,再点击左侧对勾commit。
再将Amend commit勾选上,然后commit。
可以看到没有创建新的节点。
接下来完成代码逻辑部分,即点击按钮让textView的值+1,代码任意形式都可以,只要能完成功能即可,本文主要是Git应用,代码的书写不在考虑范围内。
这里可以看到已经保存过的代码前面为淡蓝色(本人色弱你说啥色就啥色),未保存为绿色,点击绿色竖条会有一个快捷窗口,上下箭头就是在这几个竖条部分移动,撤销是将新添加这部分撤销,对比可以与之前提交过的代码进行对比,即下下图:
对比界面:
然后再次提交。
此时应该有三个节点。
这时候我们已经做完一个功能了,需要将dev分支和master分支整合到一起。
首先将头结点指向master,在master分支上右键然后在Branch'master'中找到Checkout,可能因为Android Studio版本不一样,Checkout位置也有所差异,找一下就好了
然后点击VCS中Git的Merge Changes
master是当前分支,dev是要合并分支,选中dev后点击Merge即可,这里一定要看清楚,不然就合并反了。
这时候我们已经完成了一个功能,应该设置一个Tag作为标签,标志着我们的项目进入1.0状态。
右键最新节点,点击NewTag。
起一个名字然后OK。
可以看到多了一个灰色标签。
然后继续进行开发,需要将头结点指向dev,不要在头结点指向master时开发,而是在另一条分支dev上进行,功能完善后再和master合并,以保证安全性,在最新节点上右键CheckOut,如果不知道现在在哪一条分支可以先点击一下CheckOut,然后观察左侧提示,现在就是切换到dev分支上了。
然后这里新增一个减1的功能,和刚才一样先修改布局,然后提交,在完成代码逻辑部分,然后提交,最后将dev分支和master分支合并,再设置一个标签v2.0代表又完成了一个功能,相信你一定可以的,唯一注意的是别忘了切换头结点,同时还有一个小功能,在提交页面可以点击这个钟表直接修改以前的信息来用,能方便一些(应该)
现在我们在添加一个新功能,能够直接清零,我们通过菜单来实现。
先添加一个菜单资源。
点击OK后询问我们是否将这个文件加入到Git仓库,点击Add。
设置菜单布局,然后commit。
然后编写代码,可以看到我只写了一部分,因为此时项目出现了一个非常紧急的bug,即点击屏幕旋转会导致数据丢失,需要我们去紧急修复,开发需要暂停。
此时来不及等新功能开发完在修复了,所以需要将已经完成的部分暂存,等修复完毕后再继续完成
这里有三种方法暂存代码,第一种是直接checkout到master分支,系统会自动帮我们暂存,第二种是使用Git自带的Stash Changes指令,点击VCS中Git的Stash Changes
第三种是IDE特有的指令,VCS中的Shelve Changes
点击后做一些简单描述的然后暂存
可以看到Version Control新增了一列,这就是我们暂存的代码,点击左侧按钮可以将暂存的代码添加回去。
现在我们就可以去处理Bug了,首先将头结点转移到master分支,然后新创建一个分支,而不是在master分支上进行修改,否则一旦出现问题,我们连一个有Bug的版本都没有了,我们新建一个fix分支进行修复Bug。
花了一些时间将Bug修复,然后commit。
修复完成后将master和fix整合,将头结点checkout到master分支,然后整合,整合时选择fix分支
此时可以设置一个Tag标签v2.1,代表我们修复了一个Bug。
然后我们就可以继续开发了,在开发前我们还需要做一些事情,因为我们刚刚只是在master分支上修复了一个Bug,所以也需要在dev上修复这个Bug,将头结点checkout到dev分支上,然后和fix分支进行整合。
此时它会弹出一个之前没出现过的框,这是因为代码出现了冲突,需要我们收到决定保留哪些代码,点击Merge。
又出现了一个新框,这里我们需要将所以代码保留,即点击所以的双箭头。
红色背景表示代码冲突部分,需要我们决定是否保留,绿色表示不冲突。
下图三块区域代表当前版本dev、最终版本、要和并版本fix,点击箭头可以保留代码,叉号删除代码,这里我们需要保留全部代码。
中间就变成这个样子了,然后Apply,再commit一次,如果已经提交了就不用管了。
此时fix分支就已经不需要了,可以删除,右键fix分支,在Branch'fix'中选择delete即可
现在Bug修复了我们可以继续在dev分支进行开发了,先将之前暂存的代码恢复,选中要恢复的代码,然后点击左侧第一个按钮,就成功恢复了。
将功能完成,然后commit
这里因为是在暂存里做的改变,所以要选中下面这一条进行commit,否则会提示没有检测到改变,就无法commit。
提交后会提示你暂存已经不需要了是否删除,点击Remove删除掉。
之后就是老一套,移动头结点,将master和dev整合再给个Tag v3.0。
下面还有一种情况:项目要使用一种新的技术或要对代码进行重构优化,这时候也是去新建一个分支,在完成后先和dev分支整合,进行测试,没有问题后在和master分支整合,最后再将新分支删除,原理大同小异,这里不做展示了,有兴趣可以自己做一下。