Centos7 yum安装git

Git简介

1、VCS的历史

VCS版本控制系统(Version Control System),是一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统;版本控制系统不仅可以应用于软件源代码的文本文件,而且可以对任何类型的文件进行版本控制,用的比较多的如svn、git等
本地版本控制
Centos7 yum安装git

通过保存并管理文件补丁的方式,来记录对应文件修订前后的内容变化;目前最为流行的一种本地版本控制系统是rcs,根据每次修订后的补丁,rcs可以通过不断打补丁,计算出各个版本的文件内容;当然这样做之后,对于本机被管理文件可以做到版本回滚或者回退,但是对于处在不同系统上的开发者要进行协同工作就遇到了问题,于是也就有了"集中式版本控制工具"
集中式版本控制
Centos7 yum安装git

集中式版本控制系统(Centralized Version Control Systems,简称CVCS),版本库集中存放在中央服务器,而干活的时候,用的都是自己的电脑,所以要先从中央服务器取得最新的版本,然后开始干活,干完活了,再把自己的活推送给中央服务器。

这么做最显而易见的缺点是中央服务器的单点故障,如果维修一小时,那么在这一小时内,谁都无法提交更新,也就无法协同工作;如果中心数据库所在的磁盘发生损坏,又没有做恰当备份,毫无疑问你将丢失所有数据,包括项目的整个变更历史,只剩下人们在各自机器上保留的单独快照。

相比老式的VCS,每个人能看到项目中其他人在干嘛,管理员也可以控制每个开发者的权限,但是一个致命的缺点就是中央服务器的单点故障,如果发生,谁都无法提交更新,无法协同工作,甚至有丢失数据的风险,至此,后来产生了"分布式版本控制工具"
分布式版本控制
Centos7 yum安装git

客户端并不是提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来,分布式,当我们连接共享版本库时,可以先将服务器上的项目克隆到本地,相当于每一台电脑上都有整个项目的文件备份,在没有网时也可以开发,完成开发后可以先提交到本地仓库,当有网的时候再提交到共享版本库,这样一来当服务器或者自己电脑出故障,也没有任何担心

2、Git的历史

起初参与Linux开源项目的代码是由Linus Torvalds本人通过"diff"和"patch"命令来手动为别人整合代码的,随着项目越做越大,代码库之大让Linus很难继续通过手工方式管理了,社区的弟兄们也对这种方式表达了强烈不满

diff简介

比较文件中的不同点:
格式:diff 文件A 文件B >文件C
diff命令用于比较文本文件,能比较单个文件或者目录内容,但只有当输入为文本文件时才有效
如果指定了Directory1和Directory2参数,diff命令比较两个目录下名字相同的文本文件,并列出不同的二进制文件、公共子目录和只在一个目录出现的文件
diff命令主要用于比较两个文件的差异,并制作成补丁文件,然后使用patch命令对相应的文件打补丁
于是Linus选择了一个商业的版本控制系统BitKeeper,BitKeeper的东家BitMover公司出于人道主义精神,授权Linux社区免费使用这个版本控制系统
直到2005年,Linux社区牛人聚集,不免沾染了一些梁山好汉的江湖习气,开发Samba的Andrew试图破解BitKeeper的协议(这么干的其实也不只他一个),被BitMover公司发现了(监控工作做得不错),于是BitMover公司怒了,要收回Linux社区的免费使用权
于是Linus向BitMover公司道个歉,保证以后严格管教弟兄们(嗯,这是不可能的)随后,Linus花了两周时间自己用C写了一个分布式版本控制系统,这就是Git,一个月之内,Linux系统的源码已经由Git管理了,Git也由此诞生了。
有人说:"Git的出现,使得其他国家和美国的计算机水平差距拉近了30年"。

3、Git和SVN的区别

Git是分布式,SVN是集中式
Git的每个历史版本存储的是完整的文件,而SVN只是存储文件的差异
Git可以离线完成大部分操作,SVN不可以
Git有着更优雅的分支和合并实现
Git有更强的撤销修改和修改版本历史的能力
Git速度更快,效率更高

4、Git和Github的关系

Git是一个分布式的版本控制系统
GitHub是一个基于Git的项目托管平台,它提供了web界面,我们可以在上面创建资源仓库来存放你的项目,在本地或服务器创建一个资源仓库通过shell命令或图形用户界面可以和远端的GitHub进行项目同步更新,实现对项目的管理。
安装环境:
系统:Centos7-3.10.0-514.el7.x86_64
Git:git-1.8.3x86_64
关闭防火墙并禁止开机自启
systemctl stop firewalld.service
systemctl disable firewalld
关闭selinux 
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/sysconfig/selinux
重启 reboot
注:默认使用yum安装git目前最高版本就到1.8,如果想安装更高或者更新的git版本,可以了解一下Git源码安装

二、Git的安装

1、查看系统是否安装git

Centos7 yum安装git

2、yum安装git yum -y install git

Centos7 yum安装git

3、设置用户名和邮箱

1)设置用户名 git config --global user.name 设置用户名
Centos7 yum安装git

2)设置邮箱地址 git config --global user.email 设置邮箱
Centos7 yum安装git
注:该用户名、邮箱应为Github网站注册填写的用户名及邮箱

3)查看git配置 git config --list
Centos7 yum安装git

4)删除用户信息(如果有多个用户,想删除指定的用户可以使用)
git config --global --unset user.name 用户名

4、创建版本库

版本库又名仓库,英文名repository,你可以简单理解成一个目录,这个目录里面的所有文件都可以被Git管理起来,每个文件的修改、删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者在将来某个时刻可以“还原”。
所以,创建一个版本库非常简单,首先,选择一个合适的地方,递归创建一个空目录:
mkdir -p /opt/git
Centos7 yum安装git

5、通过git init命令把这个目录变成Git可以管理的仓库

Centos7 yum安装git
Centos7 yum安装git

6、用命令git add告诉Git,把文件将文件提交到暂存区。(自己随意写一个txt文件)

1)编写一个文件 vi /opt/git/nihao.txt
Centos7 yum安装git
注:这个文件一定要放在/opt/git/目录下才能找到(git的子目录也行)

2)将文件提交到暂存区 git add 文件名 (在同路径下执行)
git add nihao.txt
Centos7 yum安装git

3)查看当前仓库文件状态(没有提交和新增文件,但有跟踪到新文件) git status
Centos7 yum安装git

4)将文件提交到git仓库 git commit -m “ wrote a new file”
Centos7 yum安装git 
注:简单解释一下git commit命令,-m后面输入的是本次提交的说明,可以输入任意内容,当然最好是有意义的,这样你就能从历史记录里方便地找到改动记录。此命令一定要在上一条命令git add执行完,继续执行,否则可能提交失败。

5)再次查看仓库状态后,可以看见无任何内容 git status
Centos7 yum安装git
注:所有新增或更改的文件都会先放在暂存区,但确认无误时,在使用commit提交(这样的好处在于,如果更改错误随时可以回退)

7、为什么Git添加文件需要add,commit一共两步呢?因为commit可以一次提交很多文件,所以你可以多次add不同的文件,比如:

1)同时创建三个文件 file1.txt file.2txt file3.txt 
Centos7 yum安装git

2)都提交到暂存区 git add (file1.txt、file.2txt、file3.txt) 
Centos7 yum安装git

三、时光穿梭机

1、版本回退

1)修改nihao.txt文件 vi nihao.txt
Centos7 yum安装git

2)将修改的nihao.txt文件提交到git版本库 git commit -m "more a file"
Centos7 yum安装git
注:当前有两个nihao.txt版本,分别是wrote a file和more a file。当然了,在实际工作中,我们脑子里怎么可能记得一个几千行的文件每次都改了什么内容,不然要版本控制系统干什么。
版本控制系统肯定有某个命令可以告诉我们历史记录,在Git中,我们用git log命令查看:
Centos7 yum安装git
git log命令显示从最近到最远的提交日志,我们可以看到3次提交,如果是上千行输出信息太多,看得眼花缭乱的,可以试试加上--pretty=oneline参数:
Centos7 yum安装git
注:友情提示看到的每个文件前一大串字母加数字,这个是commit id版本号。

3)将nihao.txt回退到wrote a file版本 git reset --hard HEAD^^
Centos7 yum安装git
注:首先,Git必须知道当前版本是哪个版本,在Git中,用HEAD表示当前版本,也就是最新的提交1094adb...(注意我的提交ID和你的肯定不一样),上一个版本就是HEAD^,上上一个版本就是HEAD^^,当然往上100个版本写100个^比较容易数不过来,所以写成HEAD~100。
//查看版本 git log
Centos7 yum安装git

4)到这一步可能有的童鞋就会问了?最新的版本more a file或者wrote three new file第二版本已经看不到了,我想再回到这其中的一个版本肿么办?办法其实还是有的,只要上面的命令行窗口还没有被关掉,你就可以顺着往上找啊找啊,找到其中一个版本的commit id号然后就可以直接回到那个版本。(本文回到最新的版本more a file)
Centos7 yum安装git
版本号没必要写全,前几位就可以了,Git会自动去找。当然也不能只写前一两位,因为Git可能会找到多个版本号,就无法确定是哪一个了。再小心翼翼地看看nihao.txt的内容:
Centos7 yum安装git

5)如果现在你回退到了某个版本,关掉了电脑,第二天早上就后悔了,想恢复到新版本怎么办?找不到新版本的commit id怎么办?
在git中,总是有后悔药可以吃的。当你用$ git reset --hard HEAD^回退到wrote a file版本时,再想恢复到more a file版本,就必须找到more a file版本的commit id。Git提供了一个命令git reflog用来记录你的每一次命令:
Centos7 yum安装git
注:这样是不是解决了你的担忧呢?这样也就不用害怕有哪个版本找不回来了!

2、工作区和暂存区

Git和其他版本控制系统如SVN的一个不同之处就是有暂存区的概念。
先来看名词解释。
1)工作区(Working Directory)
就是你在电脑里能看到的目录,比如我的/opt/git/文件夹就是一个工作区:
Centos7 yum安装git

2)版本库(Repository)
工作区有一个隐藏目录.git,这个不算工作区,而是Git的版本库。
Git的版本库里存了很多东西,其中最重要的就是称为stage(或者叫index)的暂存区,还有Git为我们自动创建的第一个分支master,以及指向master的一个指针叫HEAD。
Centos7 yum安装git

3)因为我们创建Git版本库时,Git自动为我们创建了唯一一个master分支,所以,现在,git commit就是往master分支上提交更改。
你可以简单理解为,需要提交的文件修改通通放到暂存区,然后,一次性提交暂存区的所有修改。对nihao.txt做个修改,比如加上一行内容:
Centos7 yum安装git
然后,在工作区新增一个666文本文件(内容随便写)先用git status查看一下状态:
Centos7 yum安装git
Git非常清楚地告诉我们,nihao.txt被修改了,而666文本还从来没有被添加过,所以它的状态是Untracked。现在,使用两次命令git add,把nihao.txt和666都添加后,用git status再查看一下:
Centos7 yum安装git
现在,暂存区的状态就变成这样了:
Centos7 yum安装git
所以,git add命令实际上就是把要提交的所有修改放到暂存区(Stage),然后,执行git commit就可以一次性把暂存区的所有修改提交到分支。
Centos7 yum安装git
一旦提交后,如果你又没有对工作区做任何修改,那么工作区就是“干净”的:
Centos7 yum安装git
现在版本库变成了这样,暂存区就没有任何内容了:
Centos7 yum安装git

3、管理与修改

1)修改nihao.txt文件 vi nihao.txt
Centos7 yum安装git

2)将修改的nihao.txt文件添加到暂存区 git add nihao.txt
Centos7 yum安装git

3)继续修改nihao.txt文件 vi nihao.txt
Centos7 yum安装git

4)这次不添加到暂存区,直接提交 git commit -m "four new file"
Centos7 yum安装git
是不是发现第二次修改没有被提交?我们修改操作:(第二次修改没有添加到暂存区)
第一次修改 -> git add -> 第二次修改 -> git commit
当你用git add命令后,在工作区的第一次修改被放入暂存区,准备提交,但是,在工作区的第二次修改并没有放入暂存区,所以,git commit只负责把暂存区的修改提交了,也就是第一次的修改被提交了,第二次的修改不会被提交。
用git diff HEAD -- nihao.txt命令可以查看工作区和版本库里面最新版本的区别:
Centos7 yum安装git
注:由上截图可看出第二次修改,并没有被提交,那么在这里也再次警告大家,每次修改,如果不用git add到暂存区,那就不会加入到commit中。

4、撤销修改

撤销修改方式:
方式一:文件修改后还没有被放到暂存区,撤销修改就能回到版本库未修改前状态;
方式二:文件修改后添加到暂存区,撤销暂存区的修改就回到添加到暂存区后的状态,需要继续执行撤销文件操作,才能完全撤销成功;

1)查看原nihao.txt文件内容 cat nihao.txt 
Centos7 yum安装git

//修改nihao.txt文件并查看 vi nihao.txt
Centos7 yum安装git
Centos7 yum安装git

//撤销nihao.txt文件修改 git checkout 文件名
Centos7 yum安装git

//查看nihao.txt文件 cat nihao.txt
Centos7 yum安装git
注:以上截图验证了使用方式一撤销修改成功。

2)查看原nihao.txt文件内容 cat nihao.txt 
Centos7 yum安装git

//修改nihao.txt文件并查看 vi nihao.txt
Centos7 yum安装git
Centos7 yum安装git

//将修改的nihao.txt文件提交到暂存区 git add nihao.txt
Centos7 yum安装git

//撤销已提交到暂存区的nihao.txt文件的修改 git checkout nihao.txt
Centos7 yum安装git
注:已提交到暂存区的修改过的文件,不能用git checkout命令撤销,如果想撤销,那么也不是没有办法,需要两个命令结合使用,如下:

//先取消nihao.txt文件暂存区的更改 git reset HEAD 文件名
Centos7 yum安装git

//在执行撤销文件操作 git checkout nihao.txt
Centos7 yum安装git

5、删除文件

删除方式:
(1)误删除工作区的文件
(2)直接删除不需要的文件

1)误删除工作区文件 rm -rf nihao.txt
Centos7 yum安装git

//查看仓库状态 git status
Centos7 yum安装git

//撤销文件删除操作 git checkout nihao.txt
Centos7 yum安装git
注:以上操作将误删除的文件已经还原了。

2)从仓库中删除nihao.txt文件 git rm 文件
Centos7 yum安装git

//将删除操作提交到仓库 git commit -m "delete nihao.txt"
Centos7 yum安装git

//查看文件是否被删除 ls
Centos7 yum安装git

//再次查看仓库状态 git status
Centos7 yum安装git
注:查看状态,就是查看暂存区里的东西如果已经提交,则如上截图为空。

四、远程仓库

1、在本地生成ssh key

ssh-keygen -t rsa -C "邮箱地址"
Centos7 yum安装git

2、github中添加公钥

Centos7 yum安装git
Centos7 yum安装git
Centos7 yum安装git
Centos7 yum安装git
注:github中添加服务器公钥完成!

3、在GitHub中创建一个远程仓库

Centos7 yum安装git
Centos7 yum安装git
Centos7 yum安装git
注:复制远程仓库地址https://github.com/W-F-Y/test.git

4、本地clone远程仓库

git clone https://github.com/W-F-Y/test.git
Centos7 yum安装git
注:如出现:"fatal: HTTP request failed",则可能是git版本太低,需要安装更高版本。
如出现:"fatal: unable to access 'https://github.com/Paintinge/Test.git/': SSL connect error ",需更新系统软件包,然后重启。

5、本地修改代码之后提交到远程仓库

1)新建代码文件 vi remote_data.txt
Centos7 yum安装git

2)将文件添加到暂存区 git add remote_data.txt
//提交到远程仓库 git commit -m "第一个远程文件"
Centos7 yum安装git

//查看远程仓库状态,提示需提交到远程仓库 git status
Centos7 yum安装git

//在本地仓库添加一个远程仓库 
git remote add git(远程仓库标识名称可自定义) https://github.com/W-F-Y/test.git
Centos7 yum安装git

//将本地仓库内容提交到远程仓库master分支(第一次-u必须使用,之后提交操作可以忽略),注意输入用户名、密码。 git push -u git master 
Centos7 yum安装git

//查看GitHub上master分支是否有上传的文件
Centos7 yum安装git

//可以使用命令"git remote rm git"删除关联的远程仓库

//使用"git remote show git"来查看git远程仓库的具体信息
Centos7 yum安装git

//使用"git remote –v"来查看与当前本地仓库相关联的远程仓库
Centos7 yum安装git

五、分支管理

1、分支的引入

Master 是主分支,主要作为程序的发布,可以理解为是项目的最终版本,所以不能在master上进行开发,所以应该建立子分支进行开发。
团队中多个人开发一下项目,一同事在开发一个新的功能,需要一周时间完成,他写了其中的50%还没有写完,如果他提交了这个版本,那么团队中的其它人就不能继续开发了,但是等到他全部写完再全部提交,又存在每天进度丢失的风险,这如何是好呢? 
对于上面的这个问题,我们就可以用分支管理的办法来解决,一同事开发新功能他可以创建一个属于他自己的分支,其它同事暂时看不到,继续在开发分支(一般都有多个分支)上干活,他在自己的分支上干活,等他全部开发完成,再一次性的合并到主分支上,这样我们既可知道他的开发进度,又不影响大家干活,其他的版本控制器也有分支的概念,只不过切换,删除分支的时候非常慢、效率低下,而git切换或者删除分支几乎就是一瞬间的事

2、查看分支 git branch

Centos7 yum安装git

3、创建分支 git branch 分支名

Centos7 yum安装git

4、切换分支 git checkout 分支名

Centos7 yum安装git

5、创建并切换分支

git checkout -b 分支名称
Centos7 yum安装git

6、删除分支 git branch -d分支名称

Centos7 yum安装git
注:如果要删除的分支,正处于当前工作分支,必须切换到其余分支中才能删除。

7、合并分支

1)查看当前所处分支 git branch
Centos7 yum安装git

2)在当前分支下新建test2.txt文件 vi test2.txt
Centos7 yum安装git

3)将文件提交到暂存区 git add test2.txt
Centos7 yum安装git

4)将暂存区内容提交到本地仓库 git commit -m "test2分支新文件"
Centos7 yum安装git

5)切换到master分支 git checkout master
Centos7 yum安装git

6)查看test2分支文件 ls
Centos7 yum安装git
注:不能跨分支查看其他分支的文件
7)将test2分支合并到当前分支 git merge test2
Centos7 yum安装git

8、分支冲突

代码冲突如何产生的:当在分支上进行开发的时候,难免遇到别的开发人员和我们自己向仓库中提交相同的代码

1)切换到test分支 git checkout test
Centos7 yum安装git

2)编辑当前分支test.txt文件添加一行456789 vi test.txt 
Centos7 yum安装git

3)添加文件到暂存区 git add test.txt
Centos7 yum安装git

4)将暂存区内容提交到test分支 git commit -m "test 第二次修改"
Centos7 yum安装git

5)切换到master分支 git checkout master
Centos7 yum安装git

6)修改test.txt文件 vi test.txt
Centos7 yum安装git

7)添加文件到暂存区 git add test.txt
Centos7 yum安装git

8)将暂存区内容提交到master分支 git commit -m "test 第二次改版"
Centos7 yum安装git

9)将test分支合并到当前分支 git merge test
Centos7 yum安装git
注:提示合并冲突,需要手动解决重新合并。

10)查看仓库状态 git status
Centos7 yum安装git

11)查看合并后文件内容(这时能看见两个分支更改内容,将冲突删除或修改)
Centos7 yum安装git

12)手动修改当前text.txt文件,然后进行合并。
Centos7 yum安装git

13)将修改完的文件提交并合并 
Centos7 yum安装git
注:以上已经解决了分支冲突问题,并且完成了合并。

六、标签管理

标签就是版本库的一个快照,在发布新版本的时候,一般都会给老的版本打个标签,方便后续直接使用指定的版本

1、创建标签并查询标签 git tag

Centos7 yum安装git

2、创建带有描述的标签

git tag -a 标签名称 -m 描述信息
Centos7 yum安装git

//给未打标签的文件设置标签 git tag 标签名称 commitID

1)查看当前分支所有已提交文件id git log --pretty=oneline 
Centos7 yum安装git

2)给指定commit id创建标签 git tag 666_3 84f0
Centos7 yum安装git

3、查询标签说明 git show 标签名称

Centos7 yum安装git

4、删除本地标签 git tag -d 标签名称

Centos7 yum安装git

5、提交标签到远程仓库(指定的版本号)

git push 远程仓库名 标签名称
Centos7 yum安装git
Centos7 yum安装git
//提交本地仓库所有标签 git push https://github.com/W-F-Y/test.git --tags
Centos7 yum安装git

6、删除远程仓库的标签

//先删除本地标签 git tag -d 666
Centos7 yum安装git

//再删除远程标签 git push https://github.com/W-F-Y/test.git :refs/tags/666
Centos7 yum安装git
Centos7 yum安装git

猜你喜欢

转载自blog.csdn.net/qq_43508801/article/details/85998314