本文將介紹如何在Linux系統上搭建Git服務器以及查看Git提交記錄。
搭建Git服務器
首先,我們需要一台Linux服務器,作為Git服務部署的機器,一般選用Ubuntu或者Debian,請確保擁有sudo
權限並且聯網。筆者以Mac電腦上的虛擬機為例,系統為Ubuntu 16.04。
我們先安裝Git,命令如下:
$ sudo apt-get install git
然后,創建一個git用戶,用來運行git服務:
$ sudo adduser git
接着,創建證書登錄。收集所有需要登錄的用戶的公鑰,就是他們自己的id_rsa.pub
文件,把所有公鑰導入到/home/git/.ssh/authorized_keys
文件里,一行一個。注意,有可能在/home/git中沒有.ssh文件夾,可以自行創建.ssh文件夾和authorized_keys文件,如果遇到權限問題,直接用sudo操作即可。筆者將自己Mac電腦的公鑰放在虛擬機的Ubuntu系統中的
/home/git/.ssh/authorized_keys
文件里。
然后,我們創建一個示例的Git倉庫(空倉庫),假定是/srv/sample.git
,在/srv
目錄下輸入命令:
$ sudo git init --bare sample.git
並把然后,把owner改為git
:
$ sudo chown -R git:git sample.git
創建過程如下圖:
最后,我們禁止git用戶登錄shell,這可以通過編輯/etc/passwd文件完成。找到類似下面的一行:
git:x:1001:1001:,,,:/home/git:/bin/bash
改為:
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣,git用戶可以正常通過ssh使用git,但無法登錄shell,因為我們為git用戶指定的git-shell每次一登錄就自動退出。
以上為Git服務器搭建的過程,同時我們在Git服務器上創建了一個新的空倉庫sample.git
。
Git服務器使用
首先確保客戶機(筆者自己的Mac電腦)能訪問搭建Git服務器的Linux機器(本文中是虛擬機Ubuntu系統)。筆者的虛擬機IP為192.168.0.106,在客戶機上(筆者自己的Mac電腦)利用下面的git clone
命令下載sample.git
項目。
$ git clone git@192.168.0.106:/srv/sample.git
我們利用PyCharm進行兩次提交,第一次提交README.md文件,文檔內容為"Hello from Git Server!",第二次在此基礎上新增test.txt文件,文檔內容為"2020-05-18 10:25:00"。至於如何用PyCharm提交,可以參考文章:利用PyCharm操作Github:倉庫新建、更新,代碼回滾 。截圖如下:
這時候我們再進入虛擬機(Git服務器)中去查看/srv/sample.git
,內容如下:
可以用git log
命令查看當前分支的提交記錄,如下圖:
可以看到,我們在客戶機上提交了兩次以及每次的Commit Message。切換到某次具體的提交,可以用git show
命令查看提交的內容,如下圖:
當然還有很多高級的操作,這里不再介紹。
如果我們想要在網頁中像Gitlab那樣可視化地查看提交記錄,可以借助git instaweb
命令,該命令默認配置的WEB服務器軟件為lighttpd
,如果Git服務器上沒有安裝,可以使用下面的命令安裝:
$ sudo apt-get install lighttpd
接着我們切換至/srv/sample.git
,使用下面的命令啟動git的WEB查看服務:
$ sudo git instaweb --httpd=lighttpd
在Firefox中輸入網址:http://127.0.0.1:1234,即可見到頁面如下:
在這個網址中,我們可以像Gitlab一樣方便地查看samplt.git的提交記錄,雖然功能不如Gitlab強大。
總結
如果團隊很小,把每個人的公鑰收集起來放到服務器的/home/git/.ssh/authorized_keys文件里就是可行的。如果團隊有幾百號人,就沒法這么玩了,這時,可以用Gitosis來管理公鑰。另外,如果想在離線環境下也使用Git來管理代碼,上述方法也是可行的。