美文网首页androidstudio使用
AndroidStudio中内置的git可视化工具

AndroidStudio中内置的git可视化工具

作者: 老六的简书 | 来源:发表于2017-05-05 18:20 被阅读2462次

    前言

    提到git可视化管理工具,一般大家第一个想到的都是SourceTree。没错,如果说论功能的强大肯定要数SourceTree,不然也不会被广大开发者所推荐。但是SourceTree的使用对象是针对所有开发者,所以它不会显示在你的IDE中。这也就说明在你开发的时候,你没法办直观的看到你代码的状态。对于我们Android开发者开说,目前大部分人都使用AndroidStudio,然而在AndroidStudio(下文中简称AS)中就有这样一个可视化的git工具(Git integration)。

    1、Git integration简介

    Git integration是AS安装后就带有的一个插件,我们可以在Setting->Plugins中看到,如下图:

    Paste_Image.png

    我们看到它已经8.1版本了,而且每次随着AS的发版更新,既然它一直在更新并且内置在AS中,我想我们没理由不去尝试使用一下。

    2、Git integration的基本使用

    第一步:我们从一个新建的项目开始,首先我们要开启它。如下图:

    Paste_Image.png

    在AS的菜单栏中点击VCS选项卡,点击Enable Version Control Integration...选项,弹出选择使用哪种版本控制方式。如下图:

    Paste_Image.png

    我们可以看到AS支持Git和SVN两种版本控制方式。好的,选择Git,点击OK。如果一些想知道这些操作具体是执行了哪个命令的话,大家可以点击AS底部的Version Control,选择Console,就可以看到具体执行的命令。如下图:

    Paste_Image.png

    第二步:修改.gitignore文件
    好的,此时我们就会看到当前项目已经创建了本地的仓库,项目中的文件就会展示不同的颜色,代表着不同的状态。如下图:

    Paste_Image.png

    因为我们当前项目中的文件都还没添加到版本控制,所以展示的都是红色。我们还会看到一些事灰色的。那是因为我们一旦打开Git版本控制,默认会为我们创建了.gitignore文件,里面为我们已经添加了一些忽略文件。如下图:

    Paste_Image.png

    然后我们按照自己的意愿去修改里面的配置,可以自由去定制想要忽略的文件。还有一个要注意的地方,就是对应每个module都会有一个单独的.gitignore文件。这里我们最好为每个单独的module进行单独的配置,这样是为了方便如果别人也引用这个module的时候就不需要再在自己的工程中对引用的这个module再进行忽略文件的添加。说白了,就是为了解耦。
    第三步:添加文件到版本控制,提交到本地仓库
    配置完忽略文件后,接着就要将文件添加到版本控制。如下图:

    Paste_Image.png

    你也可以单独为每个文件或者文件夹进行添加操作。这里提醒一点,当我们平时开发中,当我们新创建一个文件的时候默认会弹出这样一个提示,如下图:

    Paste_Image.png

    这个提示是询问我们是否要将新添加的文件加入到版本控制中,这个一般是要点击yes的。如果你新建的是一个自己的不需要提交到服务器的文件,你可以选择no。选择no,该文件就会显示红色,就是当前文件没有加入版本控制。当然之后你也可以自己手动再添加到版本控制中。
    添加完成之后,如下图:

    Paste_Image.png

    绿色,标识该文件添加到版本控制了,但是没有提交到本地版本库。

    Paste_Image.png

    点击该按钮,提交本地修改。

    Paste_Image.png

    填写提交信息,点击右下角按钮。这里工具给我们提供了三个功能:1.commit 提交到本地仓库;2.commit and Push 提交到本地仓库并推送到远程;3.创建本次的diff文件
    这里我们一般使用2的功能,提交到本地并推送服务器。点击提交,因为这个是我们新建的一个工程,所以会弹出这样一个页面:

    Paste_Image.png

    因为我们本地仓库从未关联过任何远程仓库,所以这里我们需要手动去关联一下远程仓库。点击Define remote。如下图:

    Paste_Image.png

    填上我们在远程仓库的地址(新建的仓库地址)。点击ok。

    Paste_Image.png

    这样就推送了远程的仓库了。这样我们就把第一次本地创建的工程成功推送到远程了。那我们其它同事就可以把这份新的工程check下来了,check新的工程这里就不讲了。
    这里说一下拉取更新,因为git的更新和svn还是有很大的区别的。其中最重要的一个是git多了一个文件的staged状态,这个类似暂存状态。就是因为这个状态在我们拉取更新的时候经常会出问题,如果你的文件没有暂存,而直接远程更新时,本地的所有未暂存的代码都将被覆盖。这点个人感觉有点恶心。但是使用AS的git插件的时候它就很人性化的帮我们做了这点,如下图:

    Paste_Image.png

    点击向下的箭头,选项不用修改,点击OK。

    这个时候我们可以再去控制台看看我们这些操作做了哪些事情:

    10:03:52.061: [MyTest] git init
    Initialized empty Git repository in /Users/zhudeshuai/Desktop/MyWorkSpace/MyTest/.git/
    10:07:16.578: [MyTest] git -c core.quotepath=false add --ignore-errors -- app/src/main/java/com/che168/mytest/MainActivity.java app/src/main/res/drawable/ic_notifications_black_24dp.xml app/src/main/res/drawable/ic_dashboard_black_24dp.xml app/src/main/res/menu/navigation.xml app/src/main/res/values/dimens.xml app/src/main/res/layout/activity_main.xml gradle.properties settings.gradle .gitignore build.gradle gradle/wrapper/gradle-wrapper.properties gradle/wrapper/gradle-wrapper.jar gradlew.bat gradlew app/src/main/AndroidManifest.xml app/build.gradle app/src/main/res/mipmap-hdpi/ic_launcher.png app/src/main/res/mipmap-mdpi/ic_launcher_round.png app/src/main/res/mipmap-mdpi/ic_launcher.png app/src/main/res/mipmap-hdpi/ic_launcher_round.png app/src/main/res/mipmap-xhdpi/ic_launcher_round.png app/src/main/res/mipmap-xhdpi/ic_launcher.png app/src/main/res/mipmap-xxxhdpi/ic_launcher.png app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png app/src/main/res/mipmap-xxhdpi/ic_launcher.png app/proguard-rules.pro app/.gitignore app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png app/src/main/res/values/strings.xml app/src/main/res/values/colors.xml app/src/main/res/values/styles.xml app/src/androidTest/java/com/che168/mytest/ExampleInstrumentedTest.java app/src/main/res/drawable/ic_home_black_24dp.xml app/src/test/java/com/che168/mytest/ExampleUnitTest.java
    warning: CRLF will be replaced by LF in gradlew.bat.
    The file will have its original line endings in your working directory.
    
    10:07:38.698: [MyTest] git -c core.quotepath=false rm --cached -f -- build.gradle gradlew.bat app/src/main/java/com/che168/mytest/MainActivity.java app/src/main/res/mipmap-xxhdpi/ic_launcher.png app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png app/.gitignore settings.gradle app/src/main/res/drawable/ic_home_black_24dp.xml app/src/main/res/mipmap-mdpi/ic_launcher.png gradle/wrapper/gradle-wrapper.properties app/src/main/res/mipmap-hdpi/ic_launcher.png app/src/main/res/drawable/ic_dashboard_black_24dp.xml .gitignore app/src/main/res/values/colors.xml app/src/androidTest/java/com/che168/mytest/ExampleInstrumentedTest.java app/src/main/res/mipmap-hdpi/ic_launcher_round.png app/proguard-rules.pro app/src/main/res/layout/activity_main.xml app/src/main/res/mipmap-xhdpi/ic_launcher_round.png app/src/test/java/com/che168/mytest/ExampleUnitTest.java app/src/main/res/menu/navigation.xml app/src/main/res/values/styles.xml gradlew gradle.properties app/src/main/res/mipmap-xxxhdpi/ic_launcher.png app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png app/build.gradle app/src/main/AndroidManifest.xml app/src/main/res/mipmap-xhdpi/ic_launcher.png app/src/main/res/values/strings.xml gradle/wrapper/gradle-wrapper.jar app/src/main/res/drawable/ic_notifications_black_24dp.xml app/src/main/res/mipmap-mdpi/ic_launcher_round.png app/src/main/res/values/dimens.xml
    10:09:26.710: [MyTest] git -c core.quotepath=false add --ignore-errors -- app/src/main/java/com/che168/mytest/MainActivity.java app/src/main/res/drawable/ic_notifications_black_24dp.xml app/src/main/res/drawable/ic_dashboard_black_24dp.xml app/src/main/res/menu/navigation.xml app/src/main/res/values/dimens.xml app/src/main/res/layout/activity_main.xml gradle.properties settings.gradle .gitignore build.gradle gradle/wrapper/gradle-wrapper.properties gradle/wrapper/gradle-wrapper.jar gradlew.bat gradlew app/src/main/AndroidManifest.xml app/build.gradle app/src/main/res/mipmap-hdpi/ic_launcher.png app/src/main/res/mipmap-mdpi/ic_launcher_round.png app/src/main/res/mipmap-mdpi/ic_launcher.png app/src/main/res/mipmap-hdpi/ic_launcher_round.png app/src/main/res/mipmap-xhdpi/ic_launcher_round.png app/src/main/res/mipmap-xhdpi/ic_launcher.png app/src/main/res/mipmap-xxxhdpi/ic_launcher.png app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png app/src/main/res/mipmap-xxhdpi/ic_launcher.png app/proguard-rules.pro app/.gitignore app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png app/src/main/res/values/strings.xml app/src/main/res/values/colors.xml app/src/main/res/values/styles.xml app/src/androidTest/java/com/che168/mytest/ExampleInstrumentedTest.java app/src/main/res/drawable/ic_home_black_24dp.xml app/src/test/java/com/che168/mytest/ExampleUnitTest.java
    warning: CRLF will be replaced by LF in gradlew.bat.
    The file will have its original line endings in your working directory.
    
    10:14:34.627: [MyTest] git -c core.quotepath=false add --ignore-errors -- test.config
    10:25:45.267: [MyTest] git -c core.quotepath=false commit --only -F /private/var/folders/yw/f0kw0y716sqb4479b0db3cz80000gn/T/git-commit-msg-.txt -- build.gradle gradlew.bat app/src/main/java/com/che168/mytest/MainActivity.java app/src/main/res/mipmap-xxhdpi/ic_launcher.png app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png app/.gitignore settings.gradle app/src/main/res/drawable/ic_home_black_24dp.xml app/src/main/res/mipmap-mdpi/ic_launcher.png gradle/wrapper/gradle-wrapper.properties app/src/main/res/mipmap-hdpi/ic_launcher.png app/src/main/res/drawable/ic_dashboard_black_24dp.xml .gitignore app/src/main/res/values/colors.xml app/src/androidTest/java/com/che168/mytest/ExampleInstrumentedTest.java app/src/main/res/mipmap-hdpi/ic_launcher_round.png app/proguard-rules.pro app/src/main/res/layout/activity_main.xml app/src/main/res/mipmap-xhdpi/ic_launcher_round.png app/src/test/java/com/che168/mytest/ExampleUnitTest.java app/src/main/res/menu/navigation.xml app/src/main/res/values/styles.xml gradlew gradle.properties test.config app/src/main/res/mipmap-xxxhdpi/ic_launcher.png app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png app/build.gradle app/src/main/AndroidManifest.xml app/src/main/res/mipmap-xhdpi/ic_launcher.png app/src/main/res/values/strings.xml gradle/wrapper/gradle-wrapper.jar app/src/main/res/drawable/ic_notifications_black_24dp.xml app/src/main/res/mipmap-mdpi/ic_launcher_round.png app/src/main/res/values/dimens.xml
    [master (root-commit) afbd78c] first commit
     35 files changed, 588 insertions(+)
     create mode 100644 .gitignore
     create mode 100644 app/.gitignore
     create mode 100644 app/build.gradle
     create mode 100644 app/proguard-rules.pro
     create mode 100644 app/src/androidTest/java/com/che168/mytest/ExampleInstrumentedTest.java
     create mode 100644 app/src/main/AndroidManifest.xml
     create mode 100644 app/src/main/java/com/che168/mytest/MainActivity.java
     create mode 100644 app/src/main/res/drawable/ic_dashboard_black_24dp.xml
     create mode 100644 app/src/main/res/drawable/ic_home_black_24dp.xml
     create mode 100644 app/src/main/res/drawable/ic_notifications_black_24dp.xml
     create mode 100644 app/src/main/res/layout/activity_main.xml
     create mode 100644 app/src/main/res/menu/navigation.xml
     create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png
     create mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_round.png
     create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png
     create mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_round.png
     create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png
     create mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
     create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png
     create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
     create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
     create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
     create mode 100644 app/src/main/res/values/colors.xml
     create mode 100644 app/src/main/res/values/dimens.xml
     create mode 100644 app/src/main/res/values/strings.xml
     create mode 100644 app/src/main/res/values/styles.xml
     create mode 100644 app/src/test/java/com/che168/mytest/ExampleUnitTest.java
     create mode 100644 build.gradle
     create mode 100644 gradle.properties
     create mode 100644 gradle/wrapper/gradle-wrapper.jar
     create mode 100644 gradle/wrapper/gradle-wrapper.properties
     create mode 100755 gradlew
     create mode 100644 gradlew.bat
     create mode 100644 settings.gradle
     create mode 100644 test.config
    
    10:29:13.520: [MyTest] git -c core.quotepath=false push --progress --porcelain origin refs/heads/master:master --set-upstream
    Counting objects: 66, done.
    Delta compression using up to 8 threads.
    Compressing objects: 100% (47/47), done.
    Writing objects: 100% (66/66), 122.24 KiB | 0 bytes/s, done.
    Total 66 (delta 2), reused 0 (delta 0)
    remote: Resolving deltas: 100% (2/2), done.        
    To https://github.com/deshuaizhu/MyTest.git
    *   refs/heads/master:refs/heads/master [new branch]
    Branch master set up to track remote branch master from origin.
    Done 
    

    这样我们也就知道了对应的操作对应哪些命令,这样即使我们以后不使用这个了,也可以用命令行搞定这些事情。

    3、Git integration的进阶使用

    3.1 如何解决冲突

    当我们本地修改了一些代码,这个时候我们拉取远程的代码。当我们有多个人都改动了同一个文件的时候就可能发生冲突。这个时候插件会给我们自动弹出一个冲突提示的对话框。如下图:

    Paste_Image.png

    这个对话框中显示了我们所有产生冲突的文件,需要我们手动去解决冲突。右边有三个操作:覆盖远端,覆盖本地,手动合并。这个一般我们会选择手动合并。点击Merge,会显示出来一个文件比较的UI,如下图:

    Paste_Image.png

    这个相信大家都很熟悉,这就是两个文件的差异对比,中间是合并之后的结果。非常的清楚。也是因为AS的文件对比比较好用,我才选择使用这个插件的。好的,合并代码,点击Apply。一个一个的解决所有的冲突之后,对话框会自动关闭。这个时候会自动弹出Version Control的窗口,下面会列出本地更新了哪些文件。如下图:

    Paste_Image.png

    我们还可以右键Show Diff,查看该文件修改了哪些地方,如下图:

    Paste_Image.png

    是不是很清晰。当初就是因为这个插件的文件比较,才喜欢上这个的。

    3.2 如何回滚代码

    相关文章

      网友评论

        本文标题:AndroidStudio中内置的git可视化工具

        本文链接:https://www.haomeiwen.com/subject/vkptnttx.html