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

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日常操作命令和流程大家可以去看網上相關教程。


聲明:本文首發於本人個人微信訂閱號:zhoujinqiaoIT,其後會同時在本人的CSDN、51CTO及oschina三處博客發佈,本人會負責在此四處答疑。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章