Skip to content

服务器 git 仓库搭建

服务器安装 git

shell
sudo apt-get install git

创建仓库

shell
cd /www
git init --bare project_code.git

由于服务器上的仓库是存放代码的,不需要修改及提交等操作

因此这里加了 --bare 参数,用于创建一个裸仓库

拉取

假设服务器已开放 ssh 访问,这里以 root 用户拉取 192.168.0.1 服务器上的 /www/project_code.git 仓库为例

在本地执行

shell
git clone root@192.168.0.1:/www/project_code.git

按照提示输入密码,即可正常拉取及修改提交

拉取路径 root@IP:/www/project_code.git@ 符号前面的用户可以为服务器上任意用户

自动拉取及部署

主要使用 git 提供的 hooks 实现

进入到刚刚创建的裸仓库目录

shell
cd /www/project_code.git/hooks

可以看到有不少的文件,这些文件是一些示例,表示我们可以在 git 的各个声明周期做一些我们需要的事情

当 git 执行到不同的生命周期阶段时,会执行这些文件,因此可以在这些文件里面写上自己需要的脚本

例如我们可以在服务器上建另外一个工作仓库,然后通过脚本进入到这个仓库并拉取代码,最后打包

这样就可以自动拉取并部署了,以下面脚本为例,首先创建 post-receive

shell
vim post-receive

写入以下内容:

shell
#!/bin/sh

# 注意上面第一行非注释,且必须要位于第一行

unset GIT_DIR

DeployPath="/www/project_code"

cd $DeployPath

git fetch --all

git reset --hard origin/master

echo "pull complete ========="

npm run build

echo "build complete ========="

exit 0

然后给这个脚本权限

shell
chmod +x post-receive

然后在服务器创建一个仓库,关联裸仓库

shell
git clone /www/project_code.git project_code

现在在本地 push 后,就会触发服务器端 project_code.githooks

进而执行 post-receive 里面的脚本,然后自动拉取代码并部署

git 远程 ssh 相关

  1. 例如用户是 git,则 /home/git/.ssh/authorized_keys 文件内存放公钥
  2. 例如用户是 git,需注意创建裸仓库时用这个用户创建不要用 root,如果用了 root 记得给权限
  3. .ssh 文件夹权限需要是 700,即img.png
  4. authorized_keys 文件权限至少是 600,即img_1.png
  5. 另外需要注意 .sshauthorized_keys 的所属用户都要设置为自己新增的用户例如
shell
chown -R git:git ./git/.ssh
# -R 表示同时为其子文件、目录设置
# : 前表示用户,后面表示组
0