開發人員學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

相關文章
相關標籤/搜索