程序員的代碼倉庫,總是需要託管一份在服務器,這樣才保險,也方便使用。
今天就來談談 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 服務器。
六、參考鏈接
(完)












