最近公司準備把專案放在一臺新的伺服器當中,要求能保留原先的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 協議》,轉載必須註明作者和本文連結