服务器上搭建Git仓库

在需要经常上传代码到服务器上时,我们可以通过在服务器上搭建Git仓库,然后在本地提交代码到Git仓库,再在服务器端通过Git Hook自动拉取代码到指定目录,下面以ubuntu服务器为例。

安装Git:

如果你的服务器上还没有Git,首先需要安装Git。你可以使用包管理工具(如apt、yum、brew)来安装Git。

以下是在Ubuntu发行版上安装Git的命令示例:

1
2
sudo apt update
sudo apt install git

创建一个空的Git仓库:

选择一个目录作为你的Git仓库存储位置,并执行以下命令来创建一个新的Git仓库:

1
2
3
mkdir /path/to/your/repo.git
cd /path/to/your/repo.git
git init --bare

设置权限:

确保Git仓库的文件和目录权限正确设置,以便Git用户可以读写仓库文件。通常,你可以使用 chmodchown 命令来设置权限和所有者。

1
chown $USER:$USER -R blog.git

客户端克隆仓库:

现在你可以在本地克隆这个远程Git仓库,以便进行代码的推送和拉取。

1
git clone user@server:/path/to/your/repo.git

其中 user 是服务器上的用户名,server 是服务器的IP地址或域名,/path/to/your/repo.git 是服务器上仓库的路径。

配置仓库的访问:

如果需要对仓库进行访问控制,你可以设置SSH密钥认证或HTTP身份验证等。这取决于你的服务器配置和需求。这里我使用的是SSH密钥认证,见使用 SSH 免密登录服务器

Git 钩子(Git Hook)自动拉取代码

有时需要自动拉取代码到服务器的指定目录,例如网页的部署。

你可以使用 Git 钩子来在 main 分支有新提交时自动触发拉取操作。在 Git 仓库的服务器端,在 Git 仓库的根目录下有一个名为 repo.git/hooks 的目录,你可以在这里创建一个自定义的 post-receive 钩子脚本。这个脚本可以在每次代码提交后自动触发。

创建 repo.git/hooks/post-receive 钩子脚本并添加以下内容:

1
2
#!/bin/bash
git --work-tree=/path/to/your/destination/directory --git-dir=/path/to/your/repo.git checkout -f main

确保设置脚本的可执行权限:

1
chmod +x /path/to/your/repo.git/hooks/post-receive

这个脚本会在每次 main 分支有新提交时,将最新的代码自动部署到 /path/to/your/destination/directory 目录中。

在网页的部署中,有时需要确保使用Git Hook拉取的代码文件权限为755(或者其他类型权限)

在使用 Git 钩子在服务器上自动拉取代码时,你可以在钩子脚本中设置代码文件的权限为755。在 post-receive 钩子脚本中,你可以添加一行命令来更改目标目录下文件的权限。下面是一个示例 post-receive 钩子脚本,它会在每次 main 分支有新提交时拉取代码,并将文件权限设置为755:

1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/bash

# Set the destination directory path
DEST_DIR="/path/to/your/destination/directory"

# Git checkout the latest code from the 'main' branch
git --work-tree="$DEST_DIR" --git-dir="/path/to/your/repo.git" checkout -f main

# Set file permissions to 755 (rwxr-xr-x) for all files in the destination directory
find "$DEST_DIR" -type f -exec chmod 755 {} \;

# Optionally, set directory permissions to 755 for all directories in the destination directory
find "$DEST_DIR" -type d -exec chmod 755 {} \;

在这个脚本中,chmod 命令被用于更改文件权限为755。find 命令用于在指定的目标目录中递归查找所有文件,并对它们应用 chmod 命令,这样每当有新提交到 main 分支时,post-receive 钩子脚本将自动拉取代码并设置文件权限为755。你也可以根据需要自定义脚本,以满足你的具体需求。