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

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

測試環境

我使用的linux版本是Centos7,若是你們使用的是其餘發行版本,步驟也都是同樣的git

安裝Git

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

yum install -y git

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

1.建立git用戶shell

adduser git

2.設置用戶密碼vim

passwd git

3.禁止shell登陸centos

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,會更加的安全bash

建立客戶端登陸證書

1.客戶端建立私鑰和公鑰服務器

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

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

2.git 服務器打開RSA驗證

vim /etc/ssh/sshd_config

找到並去掉前面的#

RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile  .ssh/authorized_keys

最後效果如圖所示

clipboard.png

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

cd /home/git
mkdir .ssh
cd .ssh
vim 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         #初始化git
git 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/sh
unset GIT_DIR
DeployPath=/var/www         #這裏的目錄是你本身虛擬主機的目錄

cd $DeployPath
git add . -A && git stash
git 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 init
git remote add origin git@118.89.28.249:test.git    #把ip換成你本身服務器的ip

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

git push -u origin master

結尾

經過上面的這些步驟其實就能夠實現一個簡易的git服務器了,是否是很簡單呢?

相關文章
相關標籤/搜索