我正在使用裸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
,但据我了解,它可以用于工作树的回购,我的裸仓不具备。
我该怎么做?
答案 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)。