前言
作为一个Android开发者,乃至任何一个开发人员,在工作和学习的过程中,或多或少都会接触并使用到版本控制工具,从最初的SVN小乌龟,到后来的SourceTree……然而,仅仅会操作GUI,界面是友好了,但是对理解Git的状态和原理却是一种阻碍,另外,如果不使用命令行,出门都不好意思和人打招呼,命令行界面虽然黑灯瞎火,但是使用起来确实方便,也会在面试时帮助自己提高点“印象分”,所以,不论面子还是里子,命令行都有必要掌握。OK,闲话先到这儿,下面开始介绍Git的一些基础知识……
一、Git的特点
1.Git作为Linux之父Linus的亲儿子,基本上用法和其余的shell命令行的用法是一致的,而其与其他版本控制工具的差别在与Git只关心数据的整体是否发生变化,不再聚焦文件内容的具体差异,更像是一个小型的文件系统,以快照的形式做保存,并且基本上所有的操作都是本地执行,无需请求网络,这样就保证了你不管身处何处,网速有多烂,都能够使用Git进行版本控制。
2.所有保存在Git数据库中的东西都是用SHA1算法计算出来的哈希值来作为文件的索引,而不是用文件名作为文件索引。SHA1值为何物?形如这么一坨东西↓
2620951873387E84176AD4984AB5B07C2AF42300
由一个40位的16进制的字符组成。
不单单Git对于文件的操作完全依赖与它,包括Android App打包签名(指纹证书),集成一些厂商的第三方SDK(用来与包名拼接生成AppKey),都会用到这个东西。而它在此处,就是Git目录下每个文件的索引值。
二、Git文件的三种状态
对于任何一个文件,在Git内都只有三种状态:已修改,已暂存,已提交。相对应的,三种状态的文件分别存放在三个目录下:工作目录(working directory),暂存区域(staging area),git仓库(git repository),抛开那些犬牙交错纷繁复杂的概念,只需要牢记一点:
仅仅修改了项目中的某一文件,什么都没做——已修改状态,对应存放在工作目录下。
修改了项目中的某一文件,并且执行了git add 命令——已暂存状态,对应存放在暂存区域下。
修改了项目中的某一文件,既执行了git add,又执行了git commit——已提交状态,对应的存放在git仓库下。
三、Git下载/安装/运行(以windows 10操作系统为例)
首先打开某度,搜索git,通常在首页中就能看到一个很醒目的条目,
然后,下载——安装——选好制定本地的目录——狂点下一步——安装完毕(此处省略若干张图)
下载好了之后,打开安装的目录点击↓
注意是点击bash.exe,至于下面那个cmd.exe,忘掉它,因为bash是linux下的命令行,即便将来换了Mac,或者Linux系统,此套命令行依然通用,真正做到了learn once, write anywhere。
运行后的界面……(缩短篇幅,此处不截图了,黑灯瞎火什么都没有,请自动脑补)
四、Git基本命令
1.配置——git config
输入上述命令后,可以看到git全部的配置信息以及对应的命令↓
好,我们挑重点说,
git config --global user.name "myname"
git config --global user.email yangyirunning@163.com
这两条全局的配置信息很重要,每次Git提交的时候都会引用这两条信息,会随更新内容一起被永久纳入历史记录。其他的配置(诸如高亮显示,别名等),默认即可,这里不展开论述。
2.初始化——git init
首先cd到你想建立git的文件夹下,一般推荐项目路径或者是空文件夹,输入上述命令,这里以我的Android项目的所在目录为例↓
上图所示即为成功,运行之后在此路径的根目录下,会产生一个隐藏的.git文件夹,关于git的一切文件,都保存在这个文件夹内
3.状态——git status
输入上述命令↓
就可以看到当前的git状态以及我们可以进行的操作。
红色部分表示当前目录下的文件均处于没有暂存的状态。
4.添加到追踪列表——git add
只有通过git add 添加了的文件才会被版本控制管理
add命令最为常用的有如下两种:
git add 文件名
git add .
前者是添加某个文件,后者是添加该目录下的所有文件,这里我们以前者带参数的用法为例↓
我们可以看到,当添加了EventBus文件后我们在通过查看状态得知,在根节点master下,EventBus文件已经被暂存了。每当项目当中的文件修改后,都应该执行add命令和status命令,用来知晓修改的文件是否暂存成功。如果不小心手抖添加错了,也仍然可以用git rm --cached 文件名来移除,当然了,这里的移除仅仅是从git的暂存目录下删除,完全不用担心本地目录下的文件被自己“误删”。
5.提交——git commit
使用add命令暂存后,文件这时已经被添加到了追踪列表(通常在项目开发完一个任务之后),这时将代码提交到你的git仓库,实现真正的提交↓
通常提交有两种命令:
git commit -m "说明信息"
**git commit **
前者适合与提交简短信息,后者适合提交长篇幅的信息,因为后者会自动打开一个编辑器。
我们以第一种为例↓
当我们通过查看状态看到最后一行的“nothing added to commit……”时,就意味着提交成功了。
6.日志——git log
通过键入“git log”命令我们就可以看到之前提交的历史记录了,作者,时间等信息
7.克隆——git clone
我们在学习和工作的过程中经常会download一些github上的开源项目,这里以事件总线EventBus(事件传递超级神器,我超爱它)为例,通过如下命令可以直接将项目下载到你的文件路径之下↓
git clone https://github.com/greenrobot/EventBus
这样就可以避免每次都通过浏览器打开github再慢悠悠的点击download zip这样的繁琐操作了(因为目录中已经将EventBus下载到本地,故截图省略)
8.不同分支——git branch
如果大家留意的话,可以看到上方每一个命令行的末尾总是显示一个master,这其实是分支名,当初始化git时,git会默认创建一个名为master的分支,我们所进行的惭怍也会在master分支下进行,不同分支之间互不影响,所以当开发一个新的功能时,就可以创建一个新的分支,当开发完此功能后,再将分支合并。
创建一个分支:
git branch 分支名
删除一个分支:
git branch -D 分支名
9.切换分支/回滚操作——git checkout
以我们上方所创建的分支fuck为例,如果想从默认的分支master切换到新建的分支fuck,可以用如下命令↓
git checkout fuck
可以看到,*号已经移到了fuck分支的前面,说明我们切换成功了。
checkout还有一个常用的用法就是文件回滚,即文件放弃修改,退回到修改之前的状态,命令如下↓
git checkout 文件名
经过此命令之后,该文件名对应的文件已经退回到了修改之前的状态了。
10.合并分支——git merge
比方说当初我为一个功能能够独立开发,为了不影响其他的分支而单独创建了一个分支(名叫fuck),现在我的这个功能开发完了,需要整个到项目中去,一并提交到git仓库,这时我就可以通过如下命令合并分支↓
git merge 分支名
在合并fuck分支之前,应该先切换回master分支,然后再执行上述命令,如果没有冲突,那么master分支将会和fuck分支合并,合并后,master分支也就有了fuck分支下的所有功能了。
注意在合并分支之前,一定要先检查,文件是否有冲突,冲突的成因是因为有多个开发者修改了同一个文件的相同地方导致,使得git系统不知道以谁的为准,此时就需要开发人员自己来抉择,选择其中的一份代码,并且将其他的代码删除,代码合并的操作都可能有冲突,原因也是同时修改了文件中的同一处代码段。
在通过自己的抉择二选一之后,重新add和commit提交代码即可。
11.为版本打标签——git tag
通常在完成了所有的功能之后,都会为每个正式发布的版本创建一个标签,这样便于后续版本的检索和维护。
相关的命令↓
创建标签
git tag -a v1.0.1 -m "第一版"
删除标签
git tag -d v1.0.1
显示标签对应的信息
git show v1.0.1
3个命令的效果↓
12.帮助——git help
好了,在日常的开发中,使用到的基本的命令就上述这些,已经一一进行过论述,而当你想要继续了解某一个命令的更为详细的信息是,可以使用↓
git help
或
git help 具体的命令
后者会打开默认打开一个网页,里面有关于此命令(以tag为例)的所有详细信息,参阅即可。↓
(以上,Git基本的命令差不多就这些)
结束语
因为时间和篇幅的关系,这篇文章并没有画下句点,正在看的你如果对Git还有其他的更加高深或者相见恨晚的操作,欢迎留言补充。衷心希望这篇文章对大家有帮助。
参考文献:《Android开发进阶从小工到专家》 何红辉著
版权声明:本文出自yangyi的博客,转载请注明出处。