標籤:

如何在Linux上搭建一個Git中央倉庫

前言:本教程只面向那些個人開發者,想要自己在linux上搭建一個git中央倉庫用來上傳發布自己的項目。但是對於團隊來說可能有更高的要求,可以使用 gitlab 搭建一個可視化的類似github的版本管理系統

測試環境

我使用的linux版本是Centos7,如果大家使用的是其他發行版本,步驟也都是一樣的

安裝Git

Centos上使用的是yum的安裝方式

yum install -y git

創建一個Git用戶來運行Git服務

1.創建git用戶

adduser git

2.設置用戶密碼

passwd git

3.禁止shell登錄

vim /etc/passwd

找到git用戶的那一行並進行修改

將git:x:1001:1001:,,,:/home/git:/bin/bash修改為git:x:1001:1001:,,,:/home/git:/usr/bin/git-shell

這樣一來剛創建git用戶可以正常通過ssh使用git,但是無法登錄shell,會更加的安全

創建客戶端登錄證書

1.客戶端創建私鑰和公鑰

ssh-keygen -t rsa -C "12345678@qq.com"

創建後你的用戶主目錄下面就有個.ssh文件夾,裡面的id.rsa就是私鑰,id.rsa_pub就是公鑰。公鑰裡面的內容待會要用到

2.git 伺服器打開RSA驗證

vim /etc/ssh/sshd_config

找到並去掉前面的#號

RSAAuthentication yesPubkeyAuthentication yesAuthorizedKeysFile .ssh/authorized_keys

最後效果如圖所示

3.在git用戶的主目錄里新建.ssh文件夾,然後在文件夾裡面新建文件authorized_keys

cd /home/gitmkdir .sshcd .sshvim authorized_keys

4.將客戶端的id.rsa_pub公鑰寫進文件authorized_keys,一行一個。添加了這個以後你連接中央倉庫就不需要輸入密碼了,直接使用公鑰和私鑰的驗證方式

創建git中央倉庫

1.進入git用戶主目錄

cd /home/git

2.創建一個裸倉庫 (一般以.git結尾)

git init --bare test.git #以test.git為例子,當然你可以叫任意名字

裸倉庫是沒有工作區的,純粹為了共享

3.修改倉庫用戶屬主

chown -R git:git test.git

使用git hook

中央倉庫其實只是一個中介,如果你想要把中央倉庫的代碼關聯到你域名掛載下的文件夾時候,就需要使用到git的鉤子來實現,當客戶端提交代碼到中央倉庫,中央倉庫能將代碼也推送到另外的一個文件夾下面

1.在伺服器初始化一個本地倉庫

這個倉庫就是你虛擬主機指定的文件夾,也就是你輸入域名後會訪問到的那個文件夾

cd /var/www #進入你虛擬主機的掛載目錄git init #初始化gitgit remote add origin /home/git/test.git #添加遠程倉庫到隔壁的中央倉庫(滑稽)chown -R git:git /var/www #修改伺服器本地倉庫的用戶屬組

2.在中央倉庫中設置鉤子

進入遠程倉庫的鉤子目錄

cd /home/git/test.git/hooks

新建一個文件post-receive

vim post-receive

編寫shell腳本

#!/bin/shunset GIT_DIRDeployPath=/var/www #這裡的目錄是你自己虛擬主機的目錄cd $DeployPathgit add . -A && git stashgit pull origin master

當然你也可以視情況而定,將這個腳本編寫得更加強大

給文件post-receive添加可執行許可權

chmod +x post-receive

客戶端遠程git伺服器

這應該也是大家最期待的步驟了,實現本地提交代碼上伺服器,通過鉤子實現項目的自動部署

其實到了這一步,就和你以前使用git上傳代碼到github上面沒有什麼區別了

1.克隆中央倉庫

方法一git clone git@192.168.229.130:test.git #把ip換成你自己伺服器的ip方法二git initgit remote add origin git@118.89.28.249:test.git #把ip換成你自己伺服器的ip

2.推送遠程伺服器 (第一次加上-u參數)

git push -u origin master

結尾

通過上面的這些步驟其實就可以實現一個簡易的git伺服器了,是不是很簡單呢?


推薦閱讀:

如何用簡單的語言解釋 Git 的基礎命令?
起底Git系列——精通Git的捷徑
為什麼你應該停止使用 Git rebase 命令
從0開始學習 GitHub 系列之「Git 進階」

TAG:Linux | Git |