说到Git,对于新手的你可能不太了解,但是,如果说到Linux,那就是再熟悉不过的事情了。那么,Git和Linux有什么关联呢?
其实,Git是Linux Torvalds(他最重要的两个贡献,一个是Linux,另外一个就是Git。这每一件事情都在IT史上都是巨大的贡献)开发出来的为了更好地管理Linux内核的工具,而现在却早已被广泛应用于全球各种大中小型项目中。
那么,究竟Git是什么呢?Git可以简单的理解为在开发中的“修改记录”(其实,这并不贴切,Git的强大功能远不止这一个!),更加准确的定义是:Git是世界上最先进的(分布式)版本控制系统(没有之一).它不同于集中式版本控制SVN等,它更加的方便和安全。
本篇文章内容只要包括以下几点,供初学者学习,大神大牛就不要浪费时间了。
1.分布式Git相对集中式SVN的优势
2.Git的下载、安装、配置
3.Git的基本用法
4.Git之分支
5.GitHub
那么,不浪费大家的时间了,开始正题吧:
要点一:分布式Git相对集中式SVN
1.集中式的版本控制工具以SVN为代表,用过它开发的都知道,它有一个中央服务器控制着所有的版本管理,其他所有的终端可以对这个中央库进行操作,将在终端上进行的操作同步到中央服务器,中央库保证版本的唯一性。
既然是集中式的,那么就有两个问题:
问题1、如果中央服务器出现问题了再也不能用了怎么办?此时的所有终端都只有该项目的一小部分功能(一般情况下,团队开发的每个成员都是完成自己的功能然后将代码同步到中央服务器的,此时的所有终端都只有自己的代码,只有中央服务器才有整个项目的版本控制),那么,整个项目的版本控制就随着中央服务器的损坏而完蛋了。
问题2、在使用SVN中的操作,例如提交、更新等等都要不断的与服务器进行交互,所以一旦网络出现问题,就很难继续操作。
分布式的版本控制工具Git就不存在以上的问题。
2.分布式的版本控制工具Git与集中式的版本控制工具以SVN的最大区别在于:它的终端可以获取到中央服务器的完整信息,就每一个终端都有一个副本。而且Git的各种操作都可以全部发生在本地,只需要最终提交到服务器就可以了,不需要频繁的通行。另外,Git相对SVN速度更快。因为Git每次记录的都是完整的信息,不是文件的差异,所以相对于SVN速度要来的快一些。
要点二:Git的下载、安装、配置
1.下载、安装:这里提供一个下载地址:http://msysgit.github.io/,目前的最新版本是 Git-2.9.3.2-64-bit ,直接下载,然后双击安装包进行安装,之后按照默认设置,一直点击下一步就可以安装完成了。
2.Git的配置:打开Git Bash (不是Git GUI哈,打开这个就没意思了,开始学习Git时还是学习它的命令好一点)
查看版本信息:git --version
配置用户姓名,邮箱:git config --global user.name "Ace" 与 git config --global user.email "1008611@qq.com"
也可以同时配置多个参数:git config --global user.name "Ace" user.email "1008611@qq.com" (注意,双引号去掉也是可以的)
查看配置信息:git config --global user.name (其他同理)
配置别名Alias:(还没有深入了解,以后补上)
要点三:Git的基本用法
1.创建代码仓库Repository,它是用于保存版本管理所需信息的地方,所有本地的代码都会被提交到代码仓库(有需要可以再推送到远程仓库中)。其实说白了就是一个目录而已,这个目录中的所以文件都被git管理,而且,不管你做什么操作都会被记录,包括:增加、删除、修改文件等,都会被记录下来,以便后来跟踪与修改相关记录,甚至被还原。
创建代码仓库,要先进入对应的目录
可以先看看当前的目录结构:
然后输入命令:git init
再看看目录结构,会发现多了一个文件
然后就可以将文件添加到代码仓库了 (注意要先切换到工程目录下):
添加单个文件:git add AndroidManifest.xml
添加一个目录:git add src
添加整个项目:git add .
当然,基于添加效率,使用 " git add . " 添加整个项目,但是,Android项目结构下的bin目录和gen目录下的文件都是会自动更新的,如果将这部分文件也一起添加到版本控制当中的话,可能会对文件的自动生成产生影响,那么应该怎么做呢?
我们可以添加忽略文件:在添加项目时不将忽略文件中指定的文件添加进去
创建、编辑忽略文件:
在忽略文件中指定忽略的文件或目录:
然后就可以添加整个项目(除了忽略文件中指定的外)到代码仓库中:
这里的warning其实是添加忽略文件造成的,虽然没有什么影响,如果觉得别扭的话可以如下设置:
具体我也不是太了解,处理方法来之博客http://www.tbdazhe.com/archives/258
注意,添加完成后还应记住提交:git commit -m "string" (string的内容可以自己定义)
提交之后,比如我在Tanks项目中修改了文件,修改如下:
这里只添加一个空函数,修改之后,我们可以查看git代码状态:git status
就可以发现我们修改了什么文件:
这里仅仅是显示修改了什么文件,如果要显示所有的详细修改信息,可以使用: git diff
如上图可以清楚的看出文件修改的详细信息,如果只是显示单个的文件修改信息的话可以在git diff 之后添加文件相对路径
当然,如果需要撤销修改也是可以的:
在使用 git add . 添加之前撤销: git checkout 文件相对路径
在使用 git add . 添加之后撤销: git reset HEAD 文件相对路径
先使用reset撤销添加,然后再次使用checkout命令来撤销修改
先来看看使用add命令之后、reset命令之前的状态:
然后使用reset命令之后的状态:
(修改部分的颜色提醒:红色表示还没有使用add命令添加修改,绿色表示已经使用add命令添加修改)
撤销添加之后,就可以使用checkout命令来撤销提交的修改了
到这里,撤销操作已经完成了。
如果你想要查看提交的记录的话,可以使用 git log
(如果不需要详细的打印操作信息,可以使用git shortlog)
如果我们还是将在前面的文件中添加一个空函数的操作提交后,再次打印log
修改->添加->提交->打印 一系列操作之后
就可以看到新提交的操作记录(所有的操作记录都可以看到)了
当然,如果你想打印某一个操作的详细记录,可以使用:git + 提交ID
可以在后面添加参数:-1 表示我们只看一条记录(不过好像没用,可能是版本问题吧,不清楚)
-p表示查看这条记录具体修改了什么内容
这里就可以清楚的看到修改的是白色框框这里我们添加的空函数,还有回车(连回车空的一行都检测出来了...)
到这里,Git的基本知识也大概就这么多了。
要点四:我目前掌握的Git高级用法 -- 分支
比如现在有一个场景:你在看法一个App时,已经上线了,然后收益还不错,你就继续在App1.0版本的基础上开发App 2.0版本,然后App 1.0出现了一些严重的Bug需要你解决,但是你目前2.0版本已经开发了一部分了,你不可能在2.0版本的基础上去修改Bug然后把它重新推出去(这样重新推出去会带有一部分2.0的新功能,当然你可以去掉2.0版本的那些新功能,或直接使用1.0版本的代码修改之后再次推出去,不过在2.0版本时你要讲1.0版本的Bug代码慢慢贴进去,解决基于1.0开发的2.0已经发现的1.0的Bug,这样开发效率低,而且不方便)
最好的解决就是Git的分支用法:
如果我们在开发2.0的时候开发一个分支,就可以在主线上继续开发2.0版本,然后在分支上修改1.0版本的Bug,重新发布1.0版本
Git分支间(或分支与主线间)的代码是不会互相干扰的,也正因为如此,所以,我们在基于1.0开发2.0的时候也把1.0的代码整合进来。
分支的具体用法如下:
查看所有分支:git branch -a
建立分支:git branch version1.0
切换到分支:git checkout version1.0 (checkout也可以用来撤销操作,前面提到过)
(当前分支会显示成绿色,分支前会有星号)
那么,如何将1.0版本的Bug解决后的代码整合到2.0版本呢,一点一点Copy还是太麻烦了
实例如下,我们在项目Tanks里面添加了一个方法:
然后把它添加、提交,然后切换回主线程(建立分支后,修改在分支进行,在主线上继续开发)
使用merge方法就可以整合代码了
merge 用法:(先切换到主线:git checkout master )
git merge version1.0(把分支1.0版本的多出来的代码整合到主线上)
最后,如果一个分支不需要了,可以删除它:git branch -D 分支
要点五:与远程版本库的协作
当团队的某个成员在自己的终端上完成某个功能之后,就将代码上传到服务器,然后其他人员只需要将服务器上的代码同步到自己的终端之后就可以闪现整个项目的所有人的代码都是一样的(Git服务器,每个成员都有一份完整代码,而SVN只是服务器有完整的代码,团队的每个成员只有自己的代码,所以Git相对会比较安全)
比如现在有一个远程库的Git地址是:https://github,com/example/text.git
那么,将代码下载到本地: git clone https://github,com/example/text.git
之后你修改后同步到远程版本库:git push origin master
(origin部分是远程版本库的Git地址,master部分是在哪个分支上)
将远程版本库的修改同步到本地:
方法1 : git fetch origin master 然后需要在调用 git merge origin/master 才能完成同步到本地,原因是fetch命令并不会合并到如何分支上,而是存放在一个origin/master上,我们可以使用 git diff origin/master 来查看修改了什么内容
方法2: 直接使用Pull命令:git pull origin master (相当于 fetch 和 merge 命令放在一起执行)就可以从远处版本库获取到最新代码并合并到本地了
要点六: 将代码托管到GitHub上
(GitHub是全球最大代码托管网站,主要是借助Git来进行版本控制的), 这部分以后有时间以后补上。
作者后记:本文章是我在刚开始学习Git时的总结,就记录下来,希望对自己、其他初学者有所帮助。当然,如果你觉得有问题,有错误,就指出来,大家探讨一下。
转载请注明出处