zoukankan      html  css  js  c++  java
  • 或许是介绍Android Studio使用Git最详细的文章

    欢迎访问我的个人博客转发请注明出处:http://www.wensibo.top/2017/03/12/GitOnAS/

    前言

    本文较长,图片很多很多,流量党慎入
    使用Git已经有一段时间了,但是之前都是使用Git Bash,在Android Studio上使用Git一开始不是很习惯,就像用惯了SVN来使用Git一样,琢磨了一段时间的Android Studio,也看了我觉得为数不多但是很有质量的介绍AS的书籍 《Android Studio实战 快速、高效地构建Android应用》,强烈安利大家哦!所以就写了这篇文章跟大家一起学习如何在Android Studio高效地使用Git。另外如果大家想要拿来学习的话可以直接fork我的项目
    另外一点需要说明的就是本文中大量使用Android Studio的快捷键,如果你不熟悉,可以看看我的另外一篇文章

    安装Git

    我使用的是Windows,所以我这里只能介绍Windows下安装Git的过程了。
    这里选择符合你的版本,直接安装就行了。
    安装完成之后,在开始菜单中找到Git-->Git Bash,如果出现类似下面的对话框的话就证明安装成功了。
    Git界面
    安装成功之后,需要配置一下你的信息,直接在上面的命令行中输入以下命令:

    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    

    注意:
    1.将上方的Your Name换成你自己的名字,随意起都行。
    2.将上方的email@example.com换成你自己的邮箱。
    3.讲一下git config命令的--global参数,用了这个参数,表示你这台机器上所有的Git仓库都会使用这个配置,当然也可以对某个仓库指定不同的用户名和Email地址。

    Android Studio配置Git

    使用快捷键Ctrl+Alt+S打开Settings,接着点击Version Control --> Git Path To Git Executable上输入Git的存放位置,如下图:
    Git Path
    之后点击旁边的Test按钮,如果出现如下的成功提示,说明Git配置成功。
    Git Success
    接着按照下图配置你的Github账号密码,输入完成之后点击Test按钮,如果账号密码都正确的话就会提示成功,那么就可以继续往下走了:
    Github Account

    创建本地仓库

    不管你是刚刚新建的项目,亦或是已经写好的项目,进行的操作都是一样的。
    这里我以新建一个名为MyGit的项目为例子,如果你想练习,也可以到这里fork一下。
    对于一个已经新建好的项目,找到菜单栏上的VCS,按照下图进行操作:
    创建本地仓库
    选择项目的根目录为git初始化的目录:
    初始化目录
    初始化之后你会发现原本文件的文件名都是白色的,现在变成了棕色,这表示文件已经被git跟踪了,但是并没有添加到仓库中:
    棕色目录

    忽略文件

    我们知道,在git初始化一个仓库的时候会自动生成一个.gitignore文件,这个文件用来忽略那些不用加入到仓库的文件,在我们这个工程中总共生成了两个.gitignore文件,分别是在项目根目录下,以及在app文件夹下。我们可以对这些文件进行编辑,表示我们需要忽略哪些文件,但是一般情况下,我们选择默认就好,除非你有需要就进行适当的修改:
    .gitignore

    添加文件

    添加文件就如git命令中的git add,在Android Studio中add的方式有四种,但是都是大同小异,让我来一一举例:

    1.选中项目的根目录,右键选中Git,再选中Add,如下图:
    第一种add方式
    2.选中项目根目录,点击菜单栏中的VCS菜单,选中Git-->Add,如下图:
    第二种add方式
    3.使用快捷键Alt+9,或者点击屏幕下方的Version Control工具按钮
    打开版本控制的窗口,可以看到应该是如下图的样子,该窗口有两个下拉栏,一个是Default,用来记录已经添加的文件,另一个是Unversioned files,用来记录已经被跟踪但是未添加的文件。
    Version Control
    右键Unversioned files,选中Git-->Add,如下图:
    第三种add方式
    4.使用快捷键Ctrl+Alt+A

    add之后文件名变成了绿色,这是代表已经添加进仓库为文件,接下来就可以commit文件了,使用快捷键Ctrl+K或者选中工程根目录右键Git-->Commit Directory可以调出commit窗口,如下所示,在其中选择你想要提交的文件,填写提交的信息,在Author文本框中可以填写提交此次提交的操作者名字,如果不填写的话,就会默认是之前配置Github账号的用户名。可以看到,提交之后文件名重新变回了熟悉的白色
    首次提交
    提交成功之后,你可以使用快捷键Alt+9,或者点击屏幕下方的Version Control工具按钮,切换到Log菜单查看Log日志,如下图所示:
    首次提交Log日志

    如何clone项目

    使用Git clone项目到本地中是很简单的,在Android Studio中也是如此,首先找到你喜欢的项目,fork到你自己的仓库之后,点击Clone or Download按钮,复制地址,如下图所示:
    github 复制地址
    接下来回到Android Studio,按照下图的操作可以打开clone的对话框,在地址栏中粘贴刚才复制的地址,点击Test按钮,测试是否可以通过,如果成功,那么久可以点击Clone导入项目了。
    clone项目
    Clone Test


    ** 回到我们最开始讲的MyGit项目,首先我们需要模仿一下在日常开发中使用Git的情形,例如我们经常会在分支上进行工作,所以熟练地掌握分支工作的流程以及技巧是十分重要的,接下来我会使用具体的例子跟大家一起了解如何在Android Studio上使用分支进行开发。
    以下举得例子将会围绕Git的一种工作模式,即:Git Flow,如果你对此不是很了解,那么推荐你阮一峰老师的文章 。**


    Git flow

    Git flow是广泛采用的一种工作流程
    Git_flow工作流程图
    他的主要特点有两个:

    1.首先,项目存在两个长期分支

    • 主分支master
    • 开发分支dev

    前者用于存放对外发布的版本,任何时候在这个分支拿到的,都是稳定的分布版;后者用于日常开发,存放最新的开发版。

    2.其次,项目存在三种短期分支

    • 功能分支(feature branch)
    • 补丁分支(hotfix branch)
    • 预发分支(release branch)

    新增功能1——显示Hello World

    正如我们在介绍Git flow介绍的,master分支只是用于产品的发布,在平时的开发中是不会使用它的,而只会使用dev分支,但是如果我们有了新的功能,一般是会在dev分支中在创建一条该功能的分支,所以我们应该这样做。

    创建dev、feature-1分支,并且我们需要转到feature-1分支上

    在Android Studio中,我们可以很方便的管理分支,在主界面的右下角,点击Git可以出现当前的分支,默认为master,我们选中New Branch,如下图所示:
    add_branch_feature-1
    在弹出的对话框中我们输入feature-1,点击OK,这样我们不仅新建了feature-1分支,并且正处于该分支中,接下来按照同样的方法创建dev分支,如果不出意外的话,我们现在应该是处于dev分支上,但是因为我们现在要开发功能1,所以必须转换到feature-1分支上,按照下图的操作,我们能够回到feature-1分支上。
    come back to feature-1
    接下来打开Log,我们应该能够看到如下的情景:
    log for add two branches
    可以看到我们现在有三个分支:master、dev、feature-1,但是AS提示我们应该有四条分支,其实HEAD就是当前活跃分支的游标。形象的记忆就是:你现在在哪儿,HEAD 就指向哪儿,所以 Git 才知道你在那儿!不过 HEAD 并非只能指向分支的最顶端,实际上它可以指向任何一个节点,它就是 Git 内部用来追踪当前位置的标记。我们可以使用下面的图来演示当前分支的情况:
    branch_picture_1

    完成功能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的时候就会比较方便。
    add feature-1 on feature-1
    点击Commit按钮提交完毕之后,可以看到现在的log图变成了下图:
    log after add feature-1
    我们可以打开Log图的右侧,他列出了目前正在被Git跟踪的所有文件,我们选中MainActivity.java,点击上边的第二个按钮Show Diff(显示差异)
    show diff
    在弹出的界面中可以显示该文件的当前版本和master分支中的该文件的差异,我们可以使用Esc快捷键退出该界面,如下图所示:
    diff1 on MainActivity.java

    将feature-1分支合并到dev分支上

    如下图所示,选中dev分支并选择checkout:
    chose dev
    你会发现现在代码回到了最开始的状态,现在选中feature-1分支并选中merge,准备将feature-1分支合并到dev分支上:
    merge feature-1 to dev
    再来重新看一下Log图,他长下面这样,可以看到现在feature-1分支已经与dev分支合并,并且现在他们是处于同一状态的:
    log after merge to dev
    最后的最后,我们需要删除已经完成任务的feature-1分支,以免分支过多管理混乱。
    delete branch feature-1

    新增功能2——显示Hello Android

    同样的道理,我们可以按照如下的步骤这样做:

    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的修改,并填写提交信息。
    add feature-2 on branch feature-2
    4.切换回dev分支并且合并feature-2分支之后删除feature-2分支。
    如果不出错的话,你的Log应该是下面这样的:
    log after delete feature-2

    在dev分支上增加功能3——Hello Java

    同样的道理,这里我就不再一一演示,如果按照上面的步骤做的话,最后的Log应该是这样的:
    log after add feature-3 on dev

    重点来了,老板说了,新开发的功能3不喜欢,需要删除了功能3,咋办呢?

    这里就需要讲到Git的回退了,在Android Studio中提供了两种回退的方式:Git revert以及Git reset。

    Git revert

    Git revert可以将版本回退到上一步,但是会新增一个提交,他的流程就像下面这幅图一样:
    git_revert_picture_2
    1.首先打开Log,找到功能3的提交,右键选择复制哈希码(Copy Revision Number),如下图所示:
    Copy Revision Number
    2.打开Android Studio的终端Terminal,他就在Version Control的旁边,之后输入以下命令按回车键:

    git revert 9c834d8c66598fb132a0cc8e4c1f8c341d058f3e
    

    那一段很复杂的数字字母就是我们刚才复制的哈希码

    如下图所示:
    git revert on terminal
    3.之后终端会列出此次提交的具体信息,如果确认要回退,请输入:q保存此次操作并且退出会话
    现在你可以看到,他确实增加了一次提交,并且回到了上一版的内容,Log应该是这样的:

    log after revert

    Git reset

    相比之下,Git reset就要干脆的多,与Git revert的功能一样,它也可以将代码恢复到上一个版本,但是不会新增一次提交,他的流程如下:
    git_reset_picture_3
    因为我们需要删除功能3,并且让Log看起来并没有revert的这一次提交,所以我们应该在dev分支上后退两步,确实是这样的对吧!

    1.点击菜单栏上的VCS-->Git-->Reset HEAD,打开对话框,在To Commit文本框中输入HEAD~2,就像下图这样:
    reset HEAD
    reset HEAD~2
    2.点击Reset按钮之后,你可以发现Log变了,变回原来那个熟悉的画面了:
    log after reset

    master分支上被修改了

    突然你发现你的同事在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应该是这样的:
    log after add feature-1&4 on master
    我们依旧用演示图表示当前分支的发展情况:
    branch_picture_4

    Rebase

    老板说了,master分支只要功能4不需要功能1,而dev分支上的功能1、2全部都要合并到master分支上。那么这个时候我们就可以使用rebase了。
    git rebase用于把一个分支的修改合并到当前分支。现在我们切换到master分支,将dev上的做修改加入到master中,所以我们选择rebase,在Android Studio中提供了功能十分强大的rebase。

    1.点击菜单栏上的VCS-->Git-->Rebase,如下图所示:
    git rebase
    2.在弹出的对话框中,我们在Onto的下拉栏中选中dev分支,表示我们需要将master分支rebase到该分支下。
    git rebase branch
    3.点击Rebase之后,你会发现Android Studio弹出对话框,显示master分支的两次提交,需要我们做出选择,如下图所示:
    git start rebasing
    4.因为我们不需要master分支上的功能1但是需要功能4,所以在功能1的提交上我们选择skip(跳过这个提交),在提交4上选择pick(挑选此次这个提交),点击 Start Rebasing,我们可以看到又有对话框弹出,此次是让我们对每个文件进行挑选,如下图所示:
    rebase conflict
    5.对于每一个文件,你可以选择接受你的那一部分,或者接受另一只分支上的内容,又或者你可以点击Merge对文件进行筛选。我们点击Merge按钮,可以看到有三个文件呈现在屏幕上。其中中间的文件是最后的结果,左边的为当前分支master分支,右边的为dev分支,你还可以发现在修改过的每一行中都存在一个X >>符号,点击X表示不需要这一行的修改,点击>>表示接受这一行的修改,我们甚至还可以像在编辑器中那样复制、粘贴、编辑内容,我们最终作出的选择如下图所示,之后可以点击Apply进行保存,如果你不想保存,那就点击Abort终止此次修改:
    conflict between files

    6.对于剩下的两个文件也做相同的处理,之后我们可以看到master分支已经有了dev分支的功能1和功能2和自身的功能4,并且去掉了自己之前的功能1,可以看一下Log,如下所示:
    log after rebase
    我们依旧使用演示图来表示最后的分支情况:
    branch_picture_5

    推送到远程仓库

    推送很简单,你可以导航到菜单栏VCS-->Import Into Version Control -->Share Project on Github,如下图所示:
    push
    在弹出的对话框中填写远程仓库的名称,点击Share:
    share
    之后你就可以在你的Github上面看到这一次的推送了。

    本地所做的修改如何同步到远程仓库

    现在我需要在工程中加入一些文件,例如说我新建了一个screenshots文件夹,并在其中添加了这篇文章需要用到的截图,那么如何将这些文件一起同步到远程仓库呢?其实很简单。

    1.使用快捷键Alt+9或者点击工具按钮打开Version Control,右键Unversioned Files,选择Git-->Add,将所有文件加入Git中,如下图:
    add files
    2.右键Default,选择Commit所有的文件之后填写提交信息,如下图:
    commit files
    3.使用快捷键Ctrl+Shift+K或者右键工程根目录,选择push项目,如下图所示:
    push project
    4.在弹出的对话框中点击Push按钮,就可以将所做的修改同步到远程仓库了,如下图:
    push!
    5.对于修改过的文件想要同步到远程仓库,按照同样的步骤就行了,这里不再赘述了。

    后记

    这篇文章有点长,图也很多,我也写了很久,有的时候思路不清晰也混了(尴尬脸),所以难免会有错误,还请大家批评指正,大家互相学习,希望你能够学到更多Android Studio的知识。

  • 相关阅读:
    思念
    空白
    curl json string with variable All In One
    virtual scroll list All In One
    corejs & RegExp error All In One
    socket.io All In One
    vue camelCase vs PascalCase vs kebabcase All In One
    element ui 表单校验,非必填字段校验 All In One
    github 定时任务 UTC 时间不准确 bug All In One
    input range & color picker All In One
  • 原文地址:https://www.cnblogs.com/ghylzwsb/p/GitOnAS.html
Copyright © 2011-2022 走看看