最簡單的 Git 伺服器

阮一峰發表於2022-10-23

程式設計師的程式碼倉庫,總是需要託管一份在伺服器,這樣才保險,也方便使用。

今天就來談談 Git 伺服器。

最簡單的 Git 伺服器

一、程式碼託管服務

一般情況下,都不建議自己搭建 Git 伺服器,而要使用現成的服務,也就是程式碼託管服務。它們都是免費的。

其中,除了最後一家 Gitee 是國內的服務,其他都是國外的服務。

這些外部服務,就不多做介紹了。本文的重點不是它們,而是想談如果不得不自己搭建 Git 伺服器,那該怎麼做。

二、Git 伺服器軟體

自己搭建 Git 伺服器的原因,無非就是不方便訪問外網,不願意程式碼放在別人的伺服器,或者有一些定製化的需求。

這時,你可以選擇開源的 Git 伺服器軟體。

這些軟體裡面,Gogs 的安裝是最簡單的,但是功能相對比較弱。功能越強的軟體,安裝越複雜。

如果你只是想遠端儲存一份程式碼,並不在意有沒有 Web 介面,或者其他功能,那麼根本不用安裝上面這些軟體,一行命令就夠了。

三、Git 倉庫的 SSH 傳輸

熟悉 Git 的同學可能知道,Git 預設支援兩種傳輸協議:SSH 和 HTTP/HTTPS。

伺服器一般都自帶 SSH,這意味著,我們可以什麼都不安裝,只透過 SSH 就把倉庫推到遠端伺服器。

所以,一條命令就夠了。我們只要在遠端伺服器上,建立同名的 Git 倉庫,伺服器就搭建好了。


$ git init --bare [倉庫名].git

上面命令中,各個部分的含義如下。

(1)git init:初始化一個 Git 倉庫。

(2)--bare:表示新倉庫不需要工作目錄,只建立 Git 資料目錄。

(3)[倉庫名].git:指定倉庫名,比如倉庫名是example,那麼就要建立一個叫做example.git的 Git 資料目錄。

執行這條命令以後,一個最簡易的 Git 伺服器就誕生了。後面,我們就可以透過 SSH 連線,把原生程式碼推送到這個遠端 Git 倉庫了。

四、操作演示

下面,我演示一下整個操作過程。

操作分成兩部分,先在遠端伺服器操作,然後在本地計算機操作。

4.1 遠端伺服器操作

下面的操作都在遠端伺服器完成,假設你已經透過 SSH 登入上去了。不熟悉 SSH 的同學可以看參考這篇《SSH 入門》

登入遠端伺服器的目的,主要是新建一個專門的使用者,所有的 Git 操作都透過該使用者完成。這一步其實不是必需的,但是這樣後期操作比較靈活(比如倉庫可以讓多人共享)。


$ sudo mkdir /home/git
$ sudo useradd git
$ sudo mkdir -m 700 /home/git/.ssh
$ sudo cp ~/.ssh/authorized_keys /home/git/.ssh/

上面命令的含義如下。

(1)新建新使用者的主目錄/home/git

(2)新建一個使用者,使用者名稱為git

(3)新建新使用者的 SSH 目錄/home/git/.ssh

(4)把當前使用者的公鑰複製給git使用者,以便金鑰登陸,詳細解釋可以參考《SSH 金鑰登入》

如果你只用密碼登入,不使用金鑰登入,那麼上面第三步和第四步是不需要的,但是需要為git使用者設定密碼,命令如下。


$ sudo passwd git

4.2 本機計算機操作

後面的操作都在本地計算機完成。

假定上一小節的遠端伺服器的 IP 地址是192.168.1.25,本地的 Git 倉庫名為example


$ ssh [email protected] git init --bare example.git

上面命令中,ssh [email protected]表示以git使用者的身份,登入到遠端伺服器。後面的部分是 SSH 的一種語法,表示登入後在遠端伺服器執行的命令,即新建一個遠端 Git 資料目錄example.git

這條命令執行完,就有了一個 Git 伺服器了,然後就可以推送程式碼了。


$ cd example
$ git remote add myServer [email protected]:example.git
$ git push myServer master

上面的命令先進入本地倉庫,為遠端伺服器加一個別名,然後把程式碼推送過去。

五、另一種操作方法

上面的例子使用git init --bare命令,在遠端伺服器新建 Git 資料目錄。其實,Git 資料目錄就是一個普通目錄,直接從本地計算機複製過去也可以。


$ scp -r example/.git [email protected]:/home/git/example.git

上面的命令使用scp工具將本地的 example倉庫裡面的.git子目錄,複製到遠端伺服器的目錄example.git。這樣也能建立 Git 伺服器。

六、參考連結

(完)

相關文章