Android开发Android开发经验谈Android技术知识

Android Git在bash环境和Android Studi

2018-08-31  本文已影响13人  echoMuJS

一 、认识Git

1.Git

Git是 Linus Torvalds 开发的一个开放源码的版本控制软件, 是一个快速的分布式版本控制系统,拥有强大的分支管理。

Git 与 SVN 区别

它和SVN的区别在于,SVN是存储每次提交之间的差异,而Git正好与之相反,它会把每次提交的文件的的全部内容都记录下来。

如果你是一个具有使用SVN背景的人,你需要做一定的思想转换,来适应Git提供的一些概念和特征。

Git 与 SVN 区别点:

核心概念

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念,接下来我们来理解下Git 工作区、暂存区和版本库的概念 。

下面这个图展示了工作区、版本库中的暂存区和版本库之间的关系:

img

我们把文件往Git版本库里添加的时候,是分两步执行的:

第一步是用git add把文件添加进去,实际上就是把文件修改添加到暂存区;

第二步是用git commit提交更改,实际上就是把暂存区的所有内容提交到当前分支。

Git的工作流程

一般工作流程如下:

2.gitlab

GitLab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。

我们所有的工作都是在本地机器上完成的,而项目组内已经创建好了代码托管服务GitLab,等到推送代码时我们要做的就是将本地项目Push到远程仓库,或者提出merge request进行分支合并,其他人就可以访问到你的代码更新。

二、安装, 配置Git

1.安装

在Windows下安装Git是很简单的,访问 git官网下载页面,选择Download for Windows,然后按默认选项安装即可 。安装成功后,AS一般会自动地引入git环境。

打开setting–>Version Control–>Git–>Path to Git executable,看到git.exe已经被设置好了,点击Test按钮,会提示AS已经成功引入了git环境。

2.配置

使用Git的第一件事就是设置你的用户名和email,这些就是你在提交commit时的签名。

需要注意的是,--global表示你这台机器上所有的Git仓库都会使用这个配置,当然你也可以不用这个选项,直接进入某个仓库的目录为其指定不同的用户名和Email。

三、基本用法

1.获取git仓库

使用 git clone 拷贝一个 Git 仓库到本地,让自己能够查看该项目,或者进行修改。

如果你需要与他人合作一个项目,或者想要复制一个项目,看看代码,你就可以克隆那个项目。

为了得一个项目的拷贝(copy),我们需要知道这个项目仓库的地址(Git URL)。Git能在许多协议下使用,所以Git URL可能以ssh://, http(s)://,git://为前缀。

我们需要从gitlab上的Git仓库拷贝项目(类似 svn checkout) ,这里采用gitlab上的git项目,使用其http协议的URL来拉取仓库代码。

$ git clone http://*.*.*.*/practice/git-demo.git

将项目克隆到本地之后,我们就可以开始工作啦。

2.正常工作流程

把文件添加到仓库

git add不但是用来添加不在版本控制中的新文件,也用于添加已在版本控制中但是刚修改过的文件。在这两种情况下, git都会获得当前文件的快照并且把内容暂存(stage)到索引中,为下一次commit做好准备。

在文件需要被Add时,在AS文件视图选择要Add的文件,点击右键VCS->Git->Add完成Add。

​ 如何知道文件已经被Add?

​ 当文件名称颜色由处于未Add状态的红色变为已Add但未被commit状态的绿色,文件已经被成功Add。

$ git add 1.md 2.md

把文件提交到本地仓库

使用git add命令将想要快照的内容写入缓存区, 而执行git commit则是将缓存区内容添加到本地仓库中。

Git 会为你的每一个提交记录你设置过的的用户名与电子邮箱地址。

$ git commit -m "add 1.md 2.md"
[master (root-commit) 692d1f4] add 1.md 2.md
 2 files changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 1.md
 create mode 100644 2.md

推送到远程仓库

$ git push
Counting objects: 3, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 211 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://10.20.1.19/practice/git-demo.git
 * [new branch]      master -> master

更新远程库

完成推送后,别人需要拉取你的更新。

$ git pull

查看Log日志

在使用 Git 提交了若干更新之后,又或者克隆了某个项目,想回顾下提交历史,我们可以使用git log来查看。

$ git log
commit c9589dda1b341e604663f3f134a2486e314ab65c (HEAD -> master)
Author: your name <your name@phone580>
Date:   Mon Aug 13 14:55:32 2018 +0800

    add files 1.md 2.md

3.分支与合并

查看分支

点击AS右下角的Git:master->New branch,然后出现下面的界面,在这里可以查看本地分支和远程分支情况,并且还能对本地和远程分支进行查看、切换、合并、删除的相关操作。

创建分支

一个Git仓库可以维护很多开发分支,现在我们来创建一个新的叫”dev-1.0.0”的分支。

$ git branch dev-1.0.0

不过,到这一步只说明见创建成功了一个本地分支而已,在远程分支上还没有你刚才创建的这个分支。这时候,我们就可以在新的分支上进行各种操作了。

操作分支

$ git checkout master
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.

​ 假如你不再需要这个分支了,也可以删除它。

$ git branch -d dev-1.0.0

git branch -d只能删除那些已经被当前分支的合并的分支。

如何合并

现在,我们将分支切到dev-1.0.0,在1.md文件里写入一句话"this is a file named 1.md.",将这个改变add并commit。

将分支切换到master。

$ git merge dev-1.0.0
Updating 692d1f4..656dc61
Fast-forward
 1.md | 1 +
 1 file changed, 1 insertion(+)

​ 可以看到,dev-1.0.0分支上的改变已经被合并到master上了。

$ cat 1.md
this is a file named 1.md.

解决冲突

当Git无法自动合并分支时,就必须首先解决冲突。解决冲突后,再提交,合并完成。

解决冲突就是把Git合并失败的文件手动编辑为我们希望的内容,再提交。

现在切换到dev-1.0.0,创建dev-1.0.1分支并切换到此分支,在1.md文件第2行增加一句话“this is dev-1.0.1.”,并add和commit。

切换到dev-1.0.0,在1.md文件第2行增加一句话“this is dev-1.0.0.”,并add和commit。

这个时候,我们来合并dev-1.0.1分支,发现产生了冲突,那我们就需要来解决冲突了。

​ 我们需要在下面的界面手动处理产生冲突的代码,最左边的是你本地的代码,最右边的是要合并的分支上的代码,中间是合并之后的结果。根据实际情况来合并,合并完成后,点击右下角的Apply完成合并。

$ git merge dev-1.0.1
Auto-merging 1.md
CONFLICT (content): Merge conflict in 1.md
Automatic merge failed; fix conflicts and then commit the result.

​ 输入git diff命令就可以查看当前有哪些文件产生了冲突,冲突的详细内容是什么。

$ git diff
diff --cc 1.md
index 420232e,a7a6fd5..0000000
--- a/1.md
+++ b/1.md
@@@ -1,2 -1,2 +1,6 @@@
  this is a file named 1.md.
- this is dev-1.0.0
 -this is dev-1.0.1
++<<<<<<< HEAD
++this is dev-1.0.0
++=======
++this is dev-1.0.1
++>>>>>>> dev-1.0.1

​ 可以看到,当前冲突的内容是在1.md文件里,出现在第2行内容。

​ 编辑有冲突的文件,解决了冲突后把这个文件添add到索引(index)中去,用git commit命令来提交,就像平时修改了一个文件 一样。

​ 使用git log查看我们刚才的操作,已经成功解决冲突,合并完成了。

$ git log
commit 0e04d8d2d516ef507ceebb8b0e4113e5cdf12ded (HEAD -> dev-1.0.0)
Merge: 66f08fc 5cc0fd0
Author: name <name@xxx.com>
Date:   Thu Aug 9 15:19:02 2018 +0800

    Merge branch 'dev-1.0.1' into dev-1.0.0

4.标签

发布一个版本时,我们通常先在版本库中打一个标签(tag),这样,就唯一确定了打标签时刻的版本。将来无论什么时候,取某个标签的版本,就是把那个打标签的时刻的历史版本取出来。所以,标签也是版本库的一个快照。

Git的标签虽然是版本库的快照,但其实它就是指向某个commit的指针(跟分支很像对不对?但是分支可以移动,标签不能移动),所以,创建和删除标签都是瞬间完成的。tag就是一个让人容易记住的有意义的名字,它跟某个commit绑在一起。

创建标签

在Git中打标签非常简单,首先,切换到需要打标签的分支上 。

四、多人协作

1.项目初始化

2.日常开发

3.产品提测

4.紧急修复

github传送门

上一篇下一篇

猜你喜欢

热点阅读