本文较长,图片很多很多,流量党慎入
使用 Git 已经有一段时间了,但是之前都是使用
,在 Android Studio 上使用 Git 一开始不是很习惯,就像用惯了 SVN 来使用 Git 一样,琢磨了一段时间的 Android Studio,也看了我觉得为数不多但是很有质量的介绍 AS 的书籍
- Git Bash
,强烈安利大家哦!所以就写了这篇文章跟大家一起学习如何在 Android Studio 高效地使用 Git。另外如果大家想要拿来学习的话可以直接 fork 。 另外一点需要说明的就是本文中大量使用 Android Studio 的快捷键,如果你不熟悉,可以看看我的 。
- 《Android Studio实战 快速、高效地构建Android应用》
我使用的是 Windows,所以我这里只能介绍 Windows 下安装 Git 的过程了。
点选择符合你的版本,直接安装就行了。
安装完成之后,在开始菜单中找到
,如果出现类似下面的对话框的话就证明安装成功了。
- Git-->Git Bash
- $ git config --global user.name "Your Name"
- $ git config --global user.email "email@example.com"
使用快捷键
打开 Settings,接着点击
- Ctrl+Alt+S
在
- Version Control --> Git
上输入 Git 的存放位置,如下图:
- Path To Git Executable
不管你是刚刚新建的项目,亦或是已经写好的项目,进行的操作都是一样的。
这里我以新建一个名为的项目为例子,如果你想练习,也可以到 fork 一下。
对于一个已经新建好的项目,找到菜单栏上的 VCS,按照下图进行操作:
选择项目的根目录为 git 初始化的目录:
初始化之后你会发现原本文件的文件名都是白色的,现在变成了棕色,这表示文件已经被 git 跟踪了,但是并没有添加到仓库中:
我们知道,在 git 初始化一个仓库的时候会自动生成一个. gitignore 文件,这个文件用来忽略那些不用加入到仓库的文件,在我们这个工程中总共生成了两个. gitignore 文件,分别是在项目根目录下,以及在 app 文件夹下。我们可以对这些文件进行编辑,表示我们需要忽略哪些文件,但是一般情况下,我们选择默认就好,除非你有需要就进行适当的修改:
添加文件就如 git 命令中的
,在 Android Studio 中 add 的方式有四种,但是都是大同小异,让我来一一举例:
- git add
1. 选中项目的根目录,右键选中 Git,再选中 Add,如下图:
2. 选中项目根目录,点击菜单栏中的 VCS 菜单,选中 Git-->Add,如下图:
3. 使用快捷键
,或者点击屏幕下方的 Version Control 工具按钮 打开版本控制的窗口,可以看到应该是如下图的样子,该窗口有两个下拉栏,一个是 Default,用来记录已经添加的文件,另一个是 Unversioned files,用来记录已经被跟踪但是未添加的文件。
- Alt+9
- Ctrl+Alt+A
add 之后文件名变成了绿色,这是代表已经添加进仓库为文件,接下来就可以 commit 文件了,使用快捷键
或者选中工程根目录右键
- Ctrl+K
可以调出 commit 窗口,如下所示,在其中选择你想要提交的文件,填写提交的信息,在 Author 文本框中可以填写提交此次提交的操作者名字,如果不填写的话,就会默认是之前配置 Github 账号的用户名。可以看到,提交之后文件名重新变回了熟悉的白色。
- Git-->Commit Directory
,或者点击屏幕下方的 Version Control 工具按钮,切换到 Log 菜单查看 Log 日志,如下图所示:
- Alt+9
使用 Git clone 项目到本地中是很简单的,在 Android Studio 中也是如此,首先找到你喜欢的项目,fork 到你自己的仓库之后,点击 Clone or Download 按钮,复制地址,如下图所示:
接下来回到 Android Studio,按照下图的操作可以打开 clone 的对话框,在地址栏中粘贴刚才复制的地址,点击 Test 按钮,测试是否可以通过,如果成功,那么久可以点击 Clone 导入项目了。
Git flow 是广泛采用的一种工作流程
他的主要特点有两个:
1. 首先,项目存在两个长期分支
前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;后者用于日常开发,存放最新的开发版。
2. 其次,项目存在三种短期分支
正如我们在介绍 Git flow 介绍的,master 分支只是用于产品的发布,在平时的开发中是不会使用它的,而只会使用 dev 分支,但是如果我们有了新的功能,一般是会在 dev 分支中在创建一条该功能的分支,所以我们应该这样做。
在 Android Studio 中,我们可以很方便的管理分支,在主界面的右下角,点击 Git 可以出现当前的分支,默认为 master,我们选中
,如下图所示:
- New Branch
,点击 OK,这样我们不仅新建了 feature-1 分支,并且正处于该分支中,接下来按照同样的方法创建 dev 分支,如果不出意外的话,我们现在应该是处于 dev 分支上,但是因为我们现在要开发功能 1,所以必须转换到
- feature-1
分支上,按照下图的操作,我们能够回到 feature-1 分支上。
- feature-1
- /**
- * feature-1
- * display HelloWorld
- * @param view
- */
- public void feature1(View view) {
- if (btn_feature_1.getText().toString().equals("功能1")) {
- btn_feature_1.setText(R.string.feature_1_dis);
- } else {
- btn_feature_1.setText(R.string.feature_1);
- }
- }
好了,功能 1 编写完成,那么就提交吧!老方法:Ctrl+K 进行提交,按照下图填写提交信息,每一次的提交信息最好能够详细并且格式规范,这样以后再查看 Log 的时候就会比较方便。
点击 Commit 按钮提交完毕之后,可以看到现在的 log 图变成了下图:
我们可以打开 Log 图的右侧,他列出了目前正在被 Git 跟踪的所有文件,我们选中 MainActivity.java,点击上边的第二个按钮
:
- Show Diff(显示差异)
快捷键退出该界面,如下图所示:
- Esc
如下图所示,选中 dev 分支并选择 checkout:
你会发现现在代码回到了最开始的状态,现在选中 feature-1 分支并选中 merge,准备将 feature-1 分支合并到 dev 分支上:
再来重新看一下 Log 图,他长下面这样,可以看到现在 feature-1 分支已经与 dev 分支合并,并且现在他们是处于同一状态的:
最后的最后,我们需要删除已经完成任务的 feature-1 分支,以免分支过多管理混乱。
同样的道理,我们可以按照如下的步骤这样做:
1. 迁出 dev 分支,并且新建分支
之后迁出
- feature-2
分支,具体的步骤我就不再演示了,跟上面的是一样的。
- feature-2
2. 开始撸代码。
- /**
- * feature-2
- * display HelloAndroid
- * @param view
- */
- public void feature2(View view) {
- if (btn_feature_2.getText().toString().equals("功能2")) {
- btn_feature_2.setText(R.string.feature_2_dis);
- } else {
- btn_feature_2.setText(R.string.feature_2);
- }
- }
3. 使用快捷键 Ctrl+K 提交 feature-2 的修改,并填写提交信息。
4. 切换回 dev 分支并且合并 feature-2 分支之后删除 feature-2 分支。
如果不出错的话,你的 Log 应该是下面这样的:
同样的道理,这里我就不再一一演示,如果按照上面的步骤做的话,最后的 Log 应该是这样的:
这里就需要讲到 Git 的回退了,在 Android Studio 中提供了两种回退的方式:Git revert 以及 Git reset。
Git revert 可以将版本回退到上一步,但是会新增一个提交,他的流程就像下面这幅图一样:
1. 首先打开 Log,找到功能 3 的提交,右键选择复制哈希码 (Copy Revision Number),如下图所示:
2. 打开 Android Studio 的终端 Terminal,他就在 Version Control 的旁边,之后输入以下命令按回车键:
- git revert 9c834d8c66598fb132a0cc8e4c1f8c341d058f3e
如下图所示:
3. 之后终端会列出此次提交的具体信息,如果确认要回退,请输入
保存此次操作并且退出会话 现在你可以看到,他确实增加了一次提交,并且回到了上一版的内容,Log 应该是这样的:
- :q
相比之下,Git reset 就要干脆的多,与 Git revert 的功能一样,它也可以将代码恢复到上一个版本,但是不会新增一次提交,他的流程如下:
因为我们需要删除功能 3,并且让 Log 看起来并没有 revert 的这一次提交,所以我们应该在 dev 分支上后退两步,确实是这样的对吧!
1. 点击菜单栏上的
,打开对话框,在 To Commit 文本框中输入
- VCS-->Git-->Reset HEAD
,就像下图这样:
- HEAD~2
突然你发现你的同事在 master 分支上提交了两次,分别是增加了功能 1 和功能 4,但是其中的功能 1 很显然
被写成了
- HelloWorld
,例如这样的:
- WorldHello
- /**
- * feature-1
- * display WorldHello
- * @param view
- */
- public void feature1(View view) {
- btn_feature_1.setText(R.string.feature_1_dis);
- }
- /**
- * feature-4
- * display Hello
- * @param view
- */
- public void feature4(View view) {
- btn_feature_4.setText(R.string.feature_4_dis);
- }
提交更改,之后 Log 应该是这样的:
我们依旧用演示图表示当前分支的发展情况:
老板说了,master 分支只要功能 4 不需要功能 1,而 dev 分支上的功能 1、2 全部都要合并到 master 分支上。那么这个时候我们就可以使用 rebase 了。
git rebase 用于把一个分支的修改合并到当前分支。现在我们切换到 master 分支,将 dev 上的做修改加入到 master 中,所以我们选择 rebase,在 Android Studio 中提供了功能十分强大的 rebase。
1. 点击菜单栏上的 VCS-->Git-->Rebase,如下图所示:
2. 在弹出的对话框中,我们在 Onto 的下拉栏中选中 dev 分支,表示我们需要将 master 分支 rebase 到该分支下。
3. 点击
之后,你会发现 Android Studio 弹出对话框,显示 master 分支的两次提交,需要我们做出选择,如下图所示:
- Rebase
,我们可以看到又有对话框弹出,此次是让我们对每个文件进行挑选,如下图所示:
- Start Rebasing
按钮,可以看到有三个文件呈现在屏幕上。其中中间的文件是最后的结果,左边的为当前分支 master 分支,右边的为 dev 分支,你还可以发现在修改过的每一行中都存在一个
- Merge
符号,点击
- X >>
表示不需要这一行的修改,点击
- X
表示接受这一行的修改,我们甚至还可以像在编辑器中那样复制、粘贴、编辑内容,我们最终作出的选择如下图所示,之后可以点击 Apply 进行保存,如果你不想保存,那就点击 Abort 终止此次修改:
- >>
6. 对于剩下的两个文件也做相同的处理,之后我们可以看到 master 分支已经有了 dev 分支的功能 1 和功能 2 和自身的功能 4,并且去掉了自己之前的功能 1,可以看一下 Log,如下所示:
我们依旧使用演示图来表示最后的分支情况:
推送很简单,你可以导航到菜单栏
,如下图所示:
- VCS-->Import Into Version Control -->Share Project on Github
现在我需要在工程中加入一些文件,例如说我新建了一个
文件夹,并在其中添加了这篇文章需要用到的截图,那么如何将这些文件一起同步到远程仓库呢?其实很简单。
- screenshots
1. 使用快捷键
或者点击工具按钮打开
- Alt+9
,右键
- Version Control
,选择
- Unversioned Files
,将所有文件加入 Git 中,如下图:
- Git-->Add
或者右键工程根目录,选择 push 项目,如下图所示:
- Ctrl+Shift+K
按钮,就可以将所做的修改同步到远程仓库了,如下图:
- Push
这篇文章有点长,图也很多,我也写了很久,有的时候思路不清晰也混了 (尴尬脸),所以难免会有错误,还请大家批评指正,大家互相学习,希望你能够学到更多 Android Studio 的知识。
来源: http://www.cnblogs.com/ghylzwsb/p/GitOnAS.html