Git 仓库迁移至其他服务器并实现 hooks 自动化部署

最近公司准备把项目放在一台新的服务器当中,要求能保留原先的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自动化部署到网站根目录也完美实现了!

git
本作品采用《CC 协议》,转载必须注明作者和本文链接
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
讨论数量: 2

原来本地也可以clone git clone /home/git/test.git //test克隆test.git仓库到test网站根目录

5年前 评论

@lovecn 对的,但应该是 git clone /home/git/test.git test //克隆test.git仓库到test网站根目录。我写错了。

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!