AndroidStudio中内置的Git可视化工具 Git integration

前言

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

1、Git integration简介

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



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

2、Git integration的基本使用

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



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



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




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




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



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




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




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




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




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



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



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




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



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



点击向下的箭头,选项不用修改,点击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 如何解决冲突

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




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



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




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




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



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值