开发人员学Linux(9):CentOS7编译安装Git-2.13.1及使用

1.前言
在上一篇讲述了如何在CentOS7上编译安装Subversion1.9.5和Apache2.4.25,并与Apache2.4.25集成,达到多个SVN版本库集中受权控制的效果。在传统的企业里面使用SVN来做为源代码版本工具的比例是比较高的,但在一些互联网企业里面不少已经在使用git来做为源代码版本管理工具了。网上关于SVN和Git的比较说明是不少的,其中最重要一个区别就是SVN是集中式的,git是分布式的,好比要查看版本库的历史提交记录,在SVN中必需要在可以链接到SVN服务器才能够,而在Git中则无需这么作,主要缘由也是由于它是分布式的,只有须要与他们协同时才须要将代码提交到中央服务器或者从中央服务器下载到本地,在通常状况下能够本地提交。
本篇就是讲述如何在CentOS7下编译安装当前最新版本的Git。
2.准备
git-2.13.1.tar.gz:Git的Linux版本,下载地址:https://www.kernel.org/pub/software/scm/git/git-2.13.1.tar.gz,固然也能够在https://www.kernel.org/pub/software/scm/git/下载其它版本。
Git-2.13.1-64-bit.exe:Git的Windows下64位操做系统版本,下载地址:https://github.com/git-for-windows/git/releases/download/v2.13.1.windows.1/Git-2.13.1-64-bit.exe
Git-2.13.1-32-bit.exe:Git的Windows下32位操做系统版本,下载地址:https://github.com/git-for-windows/git/releases/download/v2.13.1.windows.1/Git-2.13.1-32-bit.exe
TortoiseGit-2.4.0.2-32bit.msi:TortoiseGit的32位Windows版本,下载地址:https://download.tortoisegit.org/tgit/2.4.0.0/TortoiseGit-2.4.0.2-32bit.msi
TortoiseGit-2.4.0.2-64bit.msi:TortoiseGit的64位Windows版本,下载地址:https://download.tortoisegit.org/tgit/2.4.0.0/TortoiseGit-2.4.0.2-64bit.msi
TortoiseGit-LanguagePack-2.4.0.0-32bit-zh_CN.msi:TortoiseGit的32位Windows版本的中文语言包,下载地址:https://download.tortoisegit.org/tgit/2.4.0.0/TortoiseGit-LanguagePack-2.4.0.0-32bit-zh_CN.msi
TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN.msi:TortoiseGit的64位Windows版本的中文语言包,下载地址:
https://download.tortoisegit.org/tgit/2.4.0.0/TortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN.msi
在上述的7个文件中,仅须要将git-2.13.1.tar.gz放到CentOS7的/root目录下,而Git-2.13.1-64-bit.exe/Git-2.13.1-32-bit.exe和TortoiseGit-2.4.0.2-32bit.msi/ TortoiseGit-2.4.0.2-64bit.msi及TortoiseGit-LanguagePack-2.4.0.0-32bit-zh_CN.msi/ortoiseGit-LanguagePack-2.4.0.0-64bit-zh_CN.msi根据使用Windows系统的是32位仍是64位来选择安装。
3.编译安装
3.1预备
在CentOS7的源中是自带有git的,也就是咱们能够经过yum install来直接安装,可是自带的版本比较低,是git-1.8.3.1,咱们能够经过yum info git查看,下图就是查看效果:
wKiom1lnM9GggzUtAABXUsL7c0A988.png-wh_50 
而在Git官方网站目前正式版已经到2.13了,为了体验最新版本的git,须要从官网下载源代码进行编译安装。

考虑到编译安装Git过程当中会有一些对第三方库的依赖,所以先安装依赖库:
yum install asciidoc docbook2X xmlto texinfo sgml2xml autoconf openjade -y
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y

安装完成后,再卸载老版本的git:
yum remove githtml

wKiom1lnM-DSrNOSAABiV2tfW04024.png-wh_503.2编译安装Git-2.13.1
cd /root
tar -zxvf /root/git-2.13.1.tar.gz
cd /root/git-2.13.1/
make configure
./configure --prefix=/usr/local/git-2.13.1
make all doc
make install install-doc install-html
若是不出错的话,上面的命令就已经将git安装在/usr/local/git-2.13.1目录下了。

4.配置
4.1配置Git的环境变量
为便于从此执行git的相关命令,咱们能够将git的安装路径信息添加到/etc/profile这个文件中,首先增长GIT_HOME环境变量:
export GIT_HOME=/usr/local/git-2.13.1
而后编辑PATH环境变量,增长Git的安装路径信息:
export PATH=$PATH: $GIT_HOME/bin
而后从新加载环境变量设置信息:
Source /etc/profile
可使用以下命令检查配置是否正确:
git –version
which git
上面的第一条命令是查看当前git的版本的,第二条命令是查看在命令行中执行git相关命令时是执行在哪一个目录下的可执行文件。
4.2建立Git运行的user和usergroup
在CentOS7下对git的一些目录和文件的权限设置要求很苛刻,本人曾出现过屡次配置不成功的状况,为减小走弯路的状况,咱们先建立一个git的user和usergroup,而后以这个user来配置git。如下是命令:
groupadd git
useradd git -g git
同时还须要设置git用户的登陆密码:
passwd git
安装提示两次输入一致的密码便可完成git用户的密码设置。
为了保证git用户有足够的权限可以执行咱们后面将要执行的命令,咱们暂时将其添加到sudoer中(注意是暂时,配置完成后仍是要去掉这一行的),使它能够以sudo的方式执行命令,具体作法是打开/etc/sudoers文件,在root用户那一行下将git用户添加进去,以下图所示:
wKioL1lnM_GwZjFLAABcXXTg17w681.png-wh_50 
注意,使用vim编辑/etc/sudoers文件时保存时须要使用”:wq!”来保存文件,而不是经常使用的”:wq”。
4.3配置git用户免密码登陆
如今咱们切换到git用户:
su git
如今咱们能够经过ssh命令来登陆本机了,命令以下:
ssh git@localhost
在第一次使用这个命令时会看到一个提示:
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is aa:21:ce:7a:b2:06:3e:ff:3f:3e:cc:dd:40:38:64:9d.
Are you sure you want to continue connecting (yes/no)?
输入”yes”后就会要求输入git用户的登陆密码,而后就经过ssh的方式登陆到当前机器,若是想要退出ssh登陆输入”exit”命令便可,以下所示:
[root@it ~]# su git
[git@it root]$ cd ~
[git@it ~]$ pwd
/home/git
[git@it ~]$ ssh git@localhost
The authenticity of host 'localhost (::1)' can't be established.
ECDSA key fingerprint is aa:21:ce:7a:b2:06:3e:ff:3f:3e:cc:dd:40:38:64:9d.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
git@localhost's password:
Last login: Thu Jul 13 11:19:16 2017
[git@it ~]$ exit
logout
Connection to localhost closed.
[git@it ~]$

上面的操做中仍是要求咱们经过ssh方式登陆本机时须要输入用户密码,经过下面的配置便可达到无密码登陆。
以git用户身份执行ssh-keygen,在执行过程当中一路回车便可,最终会在/home/git/.ssh目录下生成id_rsa和id_rsa.pub两个文件。
接着经过以下命令建立authorized_keys文件:
touch ~/.ssh/authorized_keys && chmod 600  ~/.ssh/authorized_keys
authorized_keys用于存放本机免密码登陆的用户公钥,下一步就是经过下面的命令将刚才生成的公钥文件id_rsa.pub的内容放到authorized_keys文件中去:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
这样设置之后,从此执行ssh git@localhost就无需再输入用户名和密码了。
4.4建立git版本库
经过以下命令建立git版本库的目录(注意使用su git切换到git用户来执行):
sudo mkdir /var/git
sudo chown -R git:git /var/git
cd /var/git
git init --bare test.git
执行git init --bare test.git命令时会看到以下输出:
Initialized empty Git repository in /var/git/test.git/
至此,咱们已经一个git版本库,版本库的存放路径为/var/git/test.git。
5.检验配置
5.1安装Git-2.13.1.2
因本人的笔记本使用的Win7 X64系统,所以安装的是Git-2.13.1.2-64-bit.exe,按照软件默认设置一路Next便可。安装完成以后能够在开始菜单看到git的相关菜单。
5.2安装TortoiseGit及TortoiseGit-LanguagePack
由于Git-2.13.1.2仅提供了朴素简单的操做方式,为了便于操做建议安装TortoiseGit及TortoiseGit-LanguagePack.这里一样也是采用默认设置安装TortoiseGit及TortoiseGit-LanguagePack。
5.3Git客户端操做
5.3.1从服务器Clone版本库
这里以刚刚建立的test.git版本库为例。
在Windows系统中选择一个工做磁盘分区,点击鼠标右键,出现以下菜单:
wKiom1lnNBbyOd0EAABEitBYEoQ656.png-wh_50 
选择“Git Clone…”命令,出现以下菜单:
wKioL1lnNCSz0FVsAACJbeqfKio218.png-wh_50 
而后点击“OK”确认,弹出密码输入框,由于是以git这个帐号登陆的,因此须要输入的是刚刚建立git用户设置的密码,以下图所示:
wKiom1lnNDTyc0c-AACC1KdVbuM378.png-wh_50 
这里须要注意的是,若是没有正确设置将会看到以下错误信息:
fatal: protocol error: bad line length character: bash
git did not exit cleanly (exit code 128)
以下图:
wKiom1lnNELDx0QpAABm5oj7uBM935.png-wh_50 
出现这种状况的缘由是没有正确设置git用户所使用的shell,默认状况下用户所使用的shell为/bin/bash,这里咱们须要将其修改成/usr/local/git-2.13.1/bin/git-shell,上述信息在/etc/passwd中修改:
修改前:
git:x:1002:1002::/home/git:/bin/bash
修改后:
git:x:1002:1002::/home/git:/usr/local/git-2.13.1/bin/git-shell
修改正确后执行上述操做就不会报错了。经过上述设置后git用户能够正常经过ssh使用git,但没法登陆shell,由于咱们为git用户指定的git-shell每次一登陆就自动退出。
另外,咱们在前面临时将git用户赋予了sudo权限,这时也能够取消这个权限设置了。
5.3.2提交代码到本地版本库
在本地Git工做文件夹内建立文件而后编辑文件内容,在文件夹上点击鼠标右键,在弹出菜单中选择“Git Commit -> “master””,以下图方式所示:
wKioL1lnNFHC_NLyAABdz4atgMg516.png-wh_50 
在弹出的对话框中选择要提交的文件并填写提交日志,以下图所示:
wKiom1lnNGLwi2W9AADHb3syN0c477.png-wh_50 
点击“Commit”便可完成向本地版本库提交,以下图所示:
wKioL1lnNHfyiDMhAABz7TNnG-s641.png-wh_50 
5.3.3提交代码到中央版本库
上面的操做仅仅是提交到本地的版本库,它适用于在本地要作一些预研性的工做,取得阶段性成果后能够阶段性提交,若是不满意能够在本地撤销提交。若是在一个开发团队中,完成了所有预研工做以后,是须要提交到中央版本库的,这样同一个团队中的其它成员才能获取到更新。
向中央版本库提交代码也很简单。在本地git工做文件夹上鼠标右键,依次选择“TortoiseGit -> Push…”,以下图所示:
wKiom1lnNIfic8rAAACdVbDvBmc625.png-wh_50 
而后弹出提交配置的界面,以下图所示:
wKioL1lnNJeTyquWAACPx7nEIkU606.png-wh_50 
点击“OK”后会要求输入git用户的登陆密码,输入密码以后就会看到以下界面:
wKiom1lnNKiBjTbgAAB0Vw8rK0Y768.png-wh_50 
5.3.4查看提交历史
在git工做文件夹上点击鼠标右键,依次选择“TortoiseGit -> Show Log”就能够查看历次提交记录,以下图所示:
wKiom1lnNLjRamVBAAC4-qH14Og335.png-wh_50 

5.4注意事项
5.4.1TortoiseGit免密码提交问题
在Windows客户端也能够经过git原生程序提供的ssh-keygen程序生成id_rsa和id_rsa.pub文件,将id_rsa.pub导入到服务器上的~/.ssh/authorized_keys文件中,在使用原生的git提供的操做时能够免密码输入,可是使用TortoiseGit时却不行。若是要想在使用TortoiseGit时也无需输入密码,则须要将其生成的公钥导入到服务器上的~/.ssh/authorized_keys文件中。
具体步骤以下:
1.打开原生git自带的Git Bash命令,能够在开始菜单中选择“Git – Git Bash”。
2.在打开的命令行中输入“ssh-keygen”命令来生成用于git的公钥和私钥,按照默认设置是存放在当前用户的工做路径下的.ssh路径下,如本人Windows系统用户名为zhou.jin-qiao,生成文件路径为:C:\Users\zhou.jin-qiao\.ssh
3.打开TortoiseGit自带的PuTTYgen命令,能够在开始菜单中选择“TortoiseGit -PuTTYgen”,而后点击界面上的“Load”按钮,而后选择第二步生成的私钥,导入成功时会看到以下界面:
wKiom1lnNMnh0cPiAADl32yAr9Q481.png-wh_50 
4.点击“Save private key”按钮,将其保存到第2步中git存放公钥和私钥的路径,在本处是C:\Users\zhou.jin-qiao\.ssh,TortoiseGit使用的私钥带有ppk后缀。
5.将C:\Users\zhou.jin-qiao\.ssh\id_rsa.pub文件上传到CentOS7的tmp目录下,而后经过以下命令将公钥导入:
cat /tmp/id_rsa.pub >> ~/.ssh/authorized_keys
6. 打开TortoiseGit自带的Pageant命令,能够在开始菜单中选择“TortoiseGit -Pageant”,这个程序启动后默认最小化在系统托盘区域,鼠标右键点击图标,而后经过界面上的“Add Key”菜单导入第二步生成的私钥,这时再使用TortoiseGit对中央服务器版本库进行操做时就不须要输入用户密码了。
5.4.2Git的服务器配置问题
由于Git是Linux的做者开发Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,这个软件是基于SSH协议的(注意是Secure Shell Protocol,而不是Spring+Struts+Hibernate),因此只要服务器运行了ssh监听程序git中央服务器就能够工做了,无需再额外配置。
6.总结
在本篇讲述了如何在CentOS7上安装并配置Git使之成为中央git服务器,而后演示了在Windows客户端如何与git中央服务器协同工做,里面还涉及到两个坑:一个是没有将git的shell改成git-shell致使操做时报“git did not exit cleanly (exit code 128)”错误的问题,另外一个是在使用TortoiseGit无密码链接Git中央服务器的问题。至于git平常操做命令和流程你们能够去看网上相关教程。git


声明:本文首发于本人我的微信订阅号:zhoujinqiaoIT,其后会同时在本人的CSDN、51CTO及oschina三处博客发布,本人会负责在此四处答疑。github

相关文章
相关标签/搜索