使用git更新远程服务器上的文件

最近需要把写的个人网站文件同步到服务器上,经过查阅资料打算采用git来做,做法如下:

服务器端

创建和配置git用户

(在超级用户root下)

创建一个用户git

1
sudo adduser git

限制git用户的shell

1
vim /etc/passwd

在其中找到git用户,把最后的/bin/bash改成 /usr/bin/git-shell (你git-shell在的位置)。

修改git用户的密码(若需要)

1
passwd git

创建文件对应的git仓库

创建一个用来装仓库的文件夹

1
2
mkdir /var/repo
cd /var/repo

创建一个裸仓库

1
git init --bare my_website.git

配置一个钩子

1
vim my_website.git/hooks/post-update

在里面输入

1
2
#!/bin/bash
git --work-tree=/var/www/my_website --git-dir=/var/repo/my_website.git checkout -f

保存退出。这里 --work-tree=/var/www/my_website 这一项的地址就是你要同步到的文件夹地址。

赋予钩子可执行权限

1
chmod +x post-update

最后改变my_website.git和要同步的文件夹/var/www/my_website的拥有者为 git

1
2
chown -R git:git my_website.git
chown -R git:git /var/www/my_website

用户端

同使用github的操作,在你想要放仓库的地方右键 git bash here,然后

1
git clone git@服务器IP地址:/var/repo/my_website.git

输入先前你给用户 git 设置的密码,就把仓库拷到本地了。

之后在这个仓库中增删改文件后,通过 git addgit commitgit push 等命令都会被同步到服务器 /var/www/my_website 文件夹下。

如果不想每次都输密码,只要使用自己的公钥到服务器ssh上配置一下即可,这里就不赘述了。