Git 倉庫遷移至其他伺服器並實現 hooks 自動化部署

bossaiguo發表於2019-03-26

最近公司準備把專案放在一臺新的伺服器當中,要求能保留原先的commit記錄,需要把git專案完整的遷移過去。這裡總結了下我的遷移過程,希望能給大家一些幫助。(假設192.10.0.1是舊伺服器,192.10.0.2是新伺服器)

一:git倉庫遷移

1.把需要遷移的專案克隆一份至本地電腦上。

//從原地址克隆一份裸版本庫,比如原本託管在舊伺服器的私有倉庫
//–bare 建立的克隆版本庫都不包含工作區,直接就是版本庫的內容,這樣的版本庫稱為裸版本庫。
git clone --bare ssh://git@192.10.0.1/home/git/test.git

2.到新的 Git 伺服器上建立一個新專案。

//切換git使用者,沒有需要建立git使用者
su - git
//進入git家目錄
cd /home/git
//建立專案
mkdir test.git
//初始化一個裸倉庫
git init --bare test.git

3.切換到本地電腦,以映象推送的方式上傳程式碼到新的伺服器上。

//進入第一步複製下來的test.git 專案
cd test.git
//以映象推送的方式上傳程式碼到新的伺服器上。
//請確保已經新增了公鑰到新的機器上
git push --mirror ssh://git@192.10.0.2/home/git/test.git

4.刪除本地電腦的test.git 專案。

//rm -rf test.git

5.從新的git倉庫中clone專案到本地。

git clone ssh://git@192.10.0.2/home/git/test.git

至此,git專案完整的遷移到了新的伺服器上。

二 hooks自動部署到網站根目錄

1.把專案clone至本地根目錄

cd /var/www/html             //進入網站上級目錄
git clone /home/git/test.git  test //克隆test.git倉庫到test網站根目錄
chmod -R 777 test            //給網站根目錄設定許可權
chown -R git:git test        //將git使用者許可權設定到test根目錄上

2.設定鉤子

cd /home/git/test.git/hooks/
vim post-receive
//將以下內容寫入到 post-receive中,並給post-receive設定可讀寫許可權

#!/bin/bash
IS_BARE=$(git rev-parse --is-bare-repository)
if [ -z "$IS_BARE" ]; then
echo >&2 "fatal: post-receive: IS_NOT_BARE"
exit 1
fi
unset GIT_DIR
DeployPath="/var/www/html/test"  //你的網站根目錄
cd $DeployPath
git fetch --all
git reset --hard origin/master

遠端先開好分支然後拉到本地

git checkout -b feature-branch origin/feature-branch //檢出遠端的feature-branch分支到本地

本地先開好分支然後推送到遠端

git checkout -b feature-branch //建立並切換到分支feature-branch 
git push origin feature-branch:feature-branch //推送本地的feature-branch(冒號前面的)分支到遠端origin的feature-branch(冒號後面的)分支(沒有會自動建立)

至此hooks自動化部署到網站根目錄也完美實現了!

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章