天天看點

[Git] 代碼管理之 Git(三)Git 伺服器的搭建

我們平時使用git的時候,都是我們直接去拉取别人的倉庫的代碼,然後修改後送出到git伺服器去,那如果我們想自己搭建自己的Git伺服器該怎麼做呢?

建立倉庫

首先登入到我們準備用來做伺服器的機子上,我這裡直接用WSL的Ubuntu 20.04了。如果做過Linux管理的一般知道,我們首先需要給這台Git伺服器建立使用者組和使用者(如果不存在的話),是以我們使用下面的指令:

- sudo useradd git // 建立名為git的使用者
- sudo groupadd git // 建立名為git的使用者組
- sudo usermod -G git git // 将git使用者添加到git使用者組           

複制

好,完成上面的基礎工作後,我們接下來要建立git的倉庫目錄。

- mkdir /home/starxiang/git_test // 建立名為git_test的倉庫,此倉庫即作為git伺服器倉庫的根。           

複制

建立好目錄後,那麼接下來我們進入到此目錄中,使用下面的指令來建立一個“裸”倉庫

- git init --bare
Initialized empty Git repository in /home/starxiang/git_test/           

複制

為什麼要加上 --bare 呢,加上–bare代表目前目錄下建立的倉庫為裸倉庫,裸倉庫是沒有工作區的,因為這是Git的伺服器,我們以後使用的時候都是向它送出代碼,伺服器本身是不需要工作區的。

然後我們希望git的這個根目錄對于git使用者是可讀可寫的,是以我們更改下權限

- sudo chown -R git:git /home/starxiang/git_test/           

複制

之後我們再檢視下目錄下的檔案來确認下權限

- ls -l   // 檢視目前目錄
total 32
-rw-r--r-- 1 git git   23 Dec  1 22:06 HEAD
drwxr-xr-x 2 git git 4096 Dec  1 22:06 branches
-rw-r--r-- 1 git git   66 Dec  1 22:06 config
-rw-r--r-- 1 git git   73 Dec  1 22:06 description
drwxr-xr-x 2 git git 4096 Dec  1 22:06 hooks
drwxr-xr-x 2 git git 4096 Dec  1 22:06 info
drwxr-xr-x 4 git git 4096 Dec  1 22:06 objects
drwxr-xr-x 4 git git 4096 Dec  1 22:06 refs
- ls -l ..  // 檢視上級目錄
total 4
drwxr-xr-x 7 git git 4096 Dec  1 22:06 git_test           

複制

然後我們就可以到本地來clone建立的倉庫了。

- git clone [email protected] /home/starxiang/git_test
Cloning into 'git_test'...
git@IP's password:   // 此處輸入密碼
warning: You appear to have cloned an empty repository.           

複制

這樣,我們伺服器上的倉庫就被拉到本地了,當然,現在裡面還沒有東西。

RSA認證

我們在上面登入Git伺服器的時候,是要輸入密碼的,但是每次送出的時候都輸密碼不免非常麻煩,那麼我們有沒有辦法免除輸入密碼的這個流程呢。

辦法是有的,那就是通過rsa認證,生成公鑰和私鑰,然後把用戶端的公鑰告訴git伺服器。

在我們(用戶端)的機器上,打開git bash shell,生成rsa的秘鑰對

- ssh-keygen –t rsa           

複制

指令後一路按回車,此時會在c:/Users/starx/.ssh/目錄下生成

id_rsa.pub

id_rsa

檔案,其中

id_rsa.pub

是公鑰檔案,

id_rsa

是私鑰檔案

$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/starx/.ssh/id_rsa):
/c/Users/starx/.ssh/id_rsa already exists.
Overwrite (y/n)? y
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/starx/.ssh/id_rsa.
Your public key has been saved in /c/Users/starx/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:u40VcA9fatNUwNL6RMoXx1sQt9O5KAzZluOAkRY04HI starx@DESKTOP-T
The key's randomart image is:
+---[RSA 3072]----+
|     .o=o    o+=o|
|    .  o+ o o =oB|
|   . E...+o* =o*+|
|    o    o*+==+.o|
|        S .+*=.. |
|         . o...  |
|        . .      |
|         =       |
|        o .      |
+----[SHA256]-----+           

複制

然後我們到這個目錄裡去看看這對密鑰長什麼樣子。首先我們看

id_rsa

[Git] 代碼管理之 Git(三)Git 伺服器的搭建

然後公鑰是以 ssh-rsa 開頭的一大長串的字元。

然後我們到伺服器上同樣的步驟生成密鑰,然後在生成密鑰的檔案夾下,建立(沒有的情況下)一個

authorized_keys

的檔案

touch authorized_keys           

複制

然後把用戶端的

id_rsa.pub

的檔案内容複制(追加)到這個

authorized_keys

檔案中即可。之後就不需要每次都輸入密碼了。