开发人员学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查看,下图就是查看效果:
 
而在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 git

3.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用户添加进去,如下图所示:
 
注意,使用vim编辑/etc/sudoers文件时保存时需要使用”:wq!”来保存文件,而不是常用的”:wq”。
4.3配置git用户免密码登录
现在我们切换到git用户:
su git
现在我们可以通过ssh命令来登录本机了,命令如下:
ssh [email protected]
在第一次使用这个命令时会看到一个提示:
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”命令即可,如下所示:
[[email protected] ~]# su git
[[email protected] root]$ cd ~
[[email protected] ~]$ pwd
/home/git
[[email protected] ~]$ ssh [email protected]
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.
[email protected]‘s password:
Last login: Thu Jul 13 11:19:16 2017
[[email protected] ~]$ exit
logout
Connection to localhost closed.
[[email protected] ~]$

上面的操作中还是要求我们通过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 [email protected]就无需再输入用户名和密码了。
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系统中选择一个工作磁盘分区,点击鼠标右键,出现如下菜单:
 
选择“Git Clone…”命令,出现如下菜单:
 
然后点击“OK”确认,弹出密码输入框,因为是以git这个账号登录的,所以需要输入的是刚刚创建git用户设置的密码,如下图所示:
 
这里需要注意的是,如果没有正确设置将会看到如下错误信息:
fatal: protocol error: bad line length character: bash
git did not exit cleanly (exit code 128)
如下图:
 
出现这种情况的原因是没有正确设置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””,如下图方式所示:
 
在弹出的对话框中选择要提交的文件并填写提交日志,如下图所示:
 
点击“Commit”即可完成向本地版本库提交,如下图所示:
 
5.3.3提交代码到中央版本库
上面的操作仅仅是提交到本地的版本库,它适用于在本地要做一些预研性的工作,取得阶段性成果后可以阶段性提交,如果不满意可以在本地撤销提交。如果在一个开发团队中,完成了全部预研工作之后,是需要提交到中央版本库的,这样同一个团队中的其它成员才能获取到更新。
向中央版本库提交代码也很简单。在本地git工作文件夹上鼠标右键,依次选择“TortoiseGit -> Push…”,如下图所示:
 
然后弹出提交配置的界面,如下图所示:
 
点击“OK”后会要求输入git用户的登录密码,输入密码之后就会看到如下界面:
 
5.3.4查看提交历史
在git工作文件夹上点击鼠标右键,依次选择“TortoiseGit -> Show Log”就可以查看历次提交记录,如下图所示:

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”按钮,然后选择第二步生成的私钥,导入成功时会看到如下界面:
 
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日常操作命令和流程大家可以去看网上相关教程。

时间: 2025-01-16 16:41:15

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

开发人员学Linux(10):CentOS7安装配置代码质量管理平台SonarQube6.4

1.前言上一章讲述了如何配置使用源代码管理工具SVN并使之与Apache集成,从而实现代码的变更可追溯,虽然在大多数团队里强调代码提交之前必须找团队中经验丰富的人来审核通过后方可提交,但这一条有时候不是所有时候都能得到满足,有没有依赖于机制而不是人来保证代码质量呢,我们知道计算机的缺点也是优点之一就是可以忠实执行指令.答案是有的,那就是SonarQube,其官方网址为:https://www.sonarqube.org/,目前最新版本为6.4.SonarQube是一个开源平台,用于管理源代码的质

开发人员学Linux(4):使用JMeter对网站和数据库进行压力测试

前言表面看来,JMeter与本系列课程似乎关系不大,但实际上在后面的很多场景中起着重要作用:如何获知修改了某些代码或者设置之后系统性能是提升了还是下降了呢?商业的压力测试工具LoadRunner确实很高大上,但是据说费用也不便宜且体积也不小,而目前最高版本的开源免费压力测试工具JMeter3.2压缩包体积才不到53M,而且对于开发人员而非专业测试人员来说,JMeter提供的测试功能已经够强大了.要完整地介绍JMeter,即使把JMeter自带的文档翻译成中文就是一本厚厚的书了.但是在本篇只讲述如

开发人员学Linux之终结篇:大型系统开发经验谈

1.前言这篇文章来源于我的一个ppt,而这个ppt是源于一个朋友的一次邀请,朋友邀请我为一个公司做一堂大约2小时的技术讲座,我选定的方向是如何开发一个大型系统,在这里我对大型系统的定义为日均PV在千万级以上,而京东和淘宝这类则属于巨型系统了.因此在本篇中讲述的都是基于一些开源免费的技术实现,至于那些通过F5硬件加速.DNS来实现负载均衡.CDN加速等需要花钱购买的技术或者服务则不再本篇介绍范围之类.本来此篇是作为<开发人员学Linux>系列的终结篇最后出现的,但是考虑到在此过程中我可能会由于时

开发人员学Linux(6):CentOS7编译安装MySQL5.17.8多实例及主从复制

1.前言上一篇讲述了如何在CentOS7下编译安装Nginx-1.12.0并如何配置反向代理,本篇将讲述如何编译安装MySQL5.7.18并配置多实例.2.准备2.1下载MySQL5.7.18源码注意最新版本的MySQL需要Boost才能编译安装,在MySQL提供的下载中有不带boost的源码,还有带boost的源码,如果下载不带boost的源码还需要再去下载boost源码,为省事起见,建议下载带boost的源码,下载地址:https://cdn.mysql.com//Downloads/MyS

开发人员学Linux(7):CentOS7编译安装PHP并配置PHP-FPM

1.前言上一篇讲述了如何编译安装MySQL,虽然可以通过yum install 或者rpm来安装,但是yum install和rpm安装有一个特点,就是有些参数是别人根据大众需求定制的,如果需要进行自己的特定参数指定,这个是比较难做到的,因此有一定Linux基础的人都是编译安装或者根据公司的具体环境制作适合环境的安装包.上一篇的例子中讲述了如何编译安装和如何配置多实例,并在最后讲述了如何配置主从复制配置.以前开源开发经常将LAMP,就是Linux+Apache+MySQL+PHP,对于一些起步型

开发人员学Linux(8):CentOS7编译安装Subversion1.9.5及Apache2.4.25并集成

1.前言本篇将介绍如何编译安装SVN服务器端管理软件subverion和Web服务器Apache.本来在前面的系列文章已经讲过使用Nginx作为Web服务器的,所以我一直在找有关subverion集成nginx的资料,在此过程中找到了Nginx作者Igor Sysoev在回答别人类似问题的网址,网址是http://mailman.nginx.org/pipermail/nginx/2007-January/000504.html,不过按照Igor Sysoev的回答并没有成功,因此仍回到Apac

开发人员学Linux(5):CentOS7编译安装Nginx并搭建Tomcat负载均衡环境

1.前言在上一篇讲述了JMeter的使用,在本篇就可以应用得上了.本篇将讲述如何编译安装Nginx并利用前面的介绍搭建一个负载均衡测试环境.2.软件准备Nginx-1.12.0,下载地址:https://nginx.org/download/nginx-1.12.0.tar.gzTomcat8(本系列已介绍过如何下载和安装)JMeter(本系列已介绍过如何下载和使用)注:VirtualBox宿主机IP为"192.168.60.16,虚拟机IP为:192.168.60.198,虚拟机通过桥接方式接

开发人员学Linux(3):CentOS7中安装JDK8和Tomcat8

题外话:直到今天开始写本系列的第三篇时本人才想好为这个系列取一个名字,本系列不是为Linux运维人员准备的,而是主要为开发人员准备的,包括但不限于:希望了解Linux的开发人员:需要在Linux上部署一些组件的开发人员,如Memcached/Nginx/Redis等:需要使用一些在Linux上部署运行效果可能会更好的效果的系统,如Jetkins.SVN.JavaMelody等.希望了解一些当前较热的技术,想在虚拟机里搭建个环境把玩一番的,如.Net Core/Hadoop等.因此在本系列文章中不

开发人员学Linux(13):CentOS7安装配置IT设备监控系统Zabbix

1.前言 在前一篇讲述了如何安装Memcached和Redis,在这一篇主要讲述如何安装企业级IT设备监控系统Zabbix.本人曾在某大型集团公司信息化部门工作,公司在多个城市以及一个城市的多个区有办公区,在那里不仅会开发软件系统,还需要对大量的软件系统.操作系统及IT设备进行监控,以保证IT基础设施能够7×24小工作.在没有实施系统之前,经常接到电话被告知网络中断了或是某个应用程序无法使用了,每次接到电话之后首先要排除是否误报,然后再分析是哪里出了问题,最终找出解决办法.每次处理事情的周期很长