本文是對 廖雪峯官方網站 - 搭建Git服務器 的實踐。
常用的git使用方法 GIT CHEAT SHEET。
1. 前言
我是用我的雲服務器來作爲Git服務器的。有一點需要注意,使用的是該雲服務器的公網ip
哦。
2. 安裝git
# ubuntu系統
~$ sudo apt-get install git
# centos系統
~$ sudo yum install git
3. 創建git用戶
git用戶是專門用來運行git服務的。
~$ sudo adduser git
4. 創建證書登錄
將所有需要用到這個Git倉庫的用戶的SSH
公鑰保存到Git服務器中的/home/git/.ssh/authorized_keys
。剛開始.ssh這個目錄可能並不存在,創建一個就行了,然後把所有用戶的公鑰(通常爲/home/用戶名/.ssh/id_rsa.pub
)保存在authorized_keys
文件中即可。
若你的電腦中沒有/home/用戶名/.ssh/id_rsa.pub
,那麼需要生成。
~$ ssh-keygen -t rsa -C "[email protected]"
5. 創建一個Git倉庫
首先,要明白的是,Git倉庫到底是個什麼東西? 歸根結底就是一個目錄而已。
創建一個/home/git/myGitServer/sample.git
目錄作爲一個倉庫。
~$ sudo git init --bare sample.git
通過--bare
參數創建的是一個裸倉庫。裸倉庫就是沒有工作區的倉庫。這是因爲服務器上的Git倉庫純粹是爲了共享,所以不讓用戶直接登錄到服務器上去改工作區,並且服務器上的Git倉庫通常都以.git結尾。
修改sample.git目錄的權限
~$ sudo chown -R git:git sample.git
6. 禁用shell登錄
爲什麼要禁用shell
登錄?這是出於安全方面的考慮。git用戶應該只允許使用git-shell
,而不能使用/bin/bash
。在/etc/passwd
文件中找到git用戶,把/bin/bash
直接修改成/usr/bin/git-shell
。
~$ sudo vim /etc/passwd
# 將 git:x:1001:1001:,,,:/home/git:/bin/bash 改爲
git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell
這樣git用戶可以正常通過ssh使用git(因爲git push
,git pull
這些操作都是基於ssh協議的),但無法登錄shell。
7. 試試看
現在就可以將這個Git服務器當作github來使用了。在你的電腦上使用git來克隆服務器上的sample.git中的代碼。
sjl@DESKTOP-BL7A7IA:~$ git clone git@Git服務器的ip:/home/myGitServer/sample.git
Cloning into 'sample'...
[email protected]'s password:
warning: You appear to have cloned an empty repository.
讓我們用ssh來連接看看
sjl@DESKTOP-BL7A7IA:~$ ssh [email protected]
[email protected]'s password:
Last login: Wed Jun 10 18:33:37 2020
fatal: Interactive git shell is not enabled.
hint: ~/git-shell-commands should exist and have read and execute access.
Connection to x.113..189.175 closed.
很明顯,使用git用戶登錄失敗了,那麼使用root用戶試試呢
sjl@DESKTOP-BL7A7IA:~$ ssh [email protected]
[email protected]'s password:
Last failed login: Wed Jun 10 20:51:31 CST 2020 from 218.85.119.92 on ssh:notty
There were 278 failed login attempts since the last successful login.
Last login: Wed Jun 10 18:33:52 2020 from 106.39.148.254
登錄成功了。
現在可以將該倉庫作爲的你的遠程倉庫使用了。
~$ git remote add mygithub git@Git服務器的ip:/home/myGitServer/sample.git
~$ git remote
mygithub
如果不需要私有的Git服務器,那麼直接使用Github就好了,如果嫌Github網速慢,使用國內版 Gitee
要方便管理公鑰,用Gitosis;
要像SVN那樣變態地控制權限,用Gitolite。
8. 擴展
有些同學可能還知道另外一個代碼託管網站 GitLab,那麼GitLab和GitHub有啥區別呢?
下面這一段來自博客 GitHub與GitLab的區別以及GitLab的搭建與使用
GitLab和GitHub一樣屬於第三方基於Git開發的作品,免費且開源(https://github.com/gitlabhq/gitlabhq 基於MIT協議),與Github類似,可以註冊用戶,任意提交你的代碼,添加SSHKey等等。不同的是,GitLab是可以部署到自己的服務器上,數據庫等一切信息都掌握在自己手上,適合團隊內部協作開發,你總不可能把團隊內部的智慧總放在別人的服務器上吧?簡單來說可把GitLab看作個人版的GitHub。
我們前面所搭建的Git服務器,只能push,pull代碼,沒有其他註冊用戶等功能,說直白點就是沒有一個像GitHub這樣的網站來管理,因此才需要用到GitLab。要搭建GitLab還是參考這篇博客 GitHub與GitLab的區別以及GitLab的搭建與使用
參考文獻
[1] 廖雪峯官方網站 - 搭建Git服務器
[2] Git官方網站的Book教程 可以選擇中文哦
[3] GitHub與GitLab的區別以及GitLab的搭建與使用