使用post-receive hook删除不相关的文件

时间:2018-05-31 16:46:55

标签: git sh githooks

我正在使用裸Git repo并通过钩子自动部署。我在本地设置了一个git remote,我可以推送到该服务器,服务器会自动更新文件。

但是,我使用Kirby CMS这是一个基于文件的CMS,这意味着应该删除任何不必要的文件。基本上,我的钩子git checkout所在的文件夹应该与回购的状态相同。

这是我的钩子脚本:

#!/bin/sh
git --work-tree=/var/www/html/myrepo --git-dir=/var/repo/myrepo checkout -f
cd /var/www/html/myrepo/assets
npm install --production

我已经阅读了git clean,但据我了解,它可以用于工作树的回购,我的裸仓不具备。

我该怎么做?

1 个答案:

答案 0 :(得分:2)

首先,在钩子脚本中运行git-checkout后,你有一个工作树,它只是在一个与裸仓的单独目录中。

其次,当您从回购中移除文件 时, 将删除受git 控制的文件(例如,使用git rm )。

也就是说,如果您还要从工作树中删除任何本地创建的文件,可以在结帐后将git clean添加到同一个钩子脚本中来执行此操作:

git --work-tree=/var/www/html/myrepo --git-dir=/var/repo/myrepo clean -fd

其中-f表示强制,-d表示也删除目录(但在任何实际环境中执行此操作之前,请先阅读the manual)。为了测试它你可以给出-n(干运行)选项,它不会删除任何东西,只是打印它会删除的内容,即:

git --work-tree=/var/www/html/myrepo --git-dir=/var/repo/myrepo clean -nd
由@jthill评论的

修改git-clean还有其他选项(-e-x-X),可以有选择地删除未跟踪的文件基于给定模式与.gitignore的组合(详见the manual)。