我們平時使用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
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICMyYTMvw1dvwlMvwlM3VWaWV2Zh1Wa-cmbw5ycyYHe0hGen5GNvwVM3gDO5kDNtUGall3LcVmdhNXLwRHdo9CXt92YucWbpRWdvx2Yx5yazF2Lc9CX6MHc0RHaiojIsJye.png)
然後公鑰是以 ssh-rsa 開頭的一大長串的字元。
然後我們到伺服器上同樣的步驟生成密鑰,然後在生成密鑰的檔案夾下,建立(沒有的情況下)一個
authorized_keys
的檔案
touch authorized_keys
複制
然後把用戶端的
id_rsa.pub
的檔案内容複制(追加)到這個
authorized_keys
檔案中即可。之後就不需要每次都輸入密碼了。