如何在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 進階」