在Git推送和部署之后,自动生成的文件将被删除

时间:2015-06-09 05:04:14

标签: git deployment

我们在/var/www/位置有一个带有WordPress项目的PHP服务器。整个/www/ root在Git中受源代码管理。因此,当我推送新代码时,它会立即部署,我们会获得新的代码。

在某些时候,我们在服务器上使用了图像构建工具,它从我们把它放在某些包中的一些数据生成图像。

/var/www/images/*.png

所以我在那个位置成功生成了图像; 但是当我添加新的更改并再次部署时,git会从包中删除所有这些png文件。

我厌倦了将此添加到git ignore,但这无助于解决问题。

1 个答案:

答案 0 :(得分:1)

  

如果我在该位置生成图像,我会得到图像,但是当我添加新的更改并再次部署时,git会从包中删除所有png文件。

如果取决于部署的完成方式(Git 2.3+ has a push to deploy, for instanceUsually, this is a post-receive hook,执行

git --work-tree=/path/to/deploy checkout -f -- .

问题在于-f/--force option from git checkout

  

切换分支时,即使索引或工作树与HEAD不同,也要继续。 这用于丢弃本地更改

一种解决方案是:

  • 确保在外的 /path/to/deploy
  • 文件夹中生成png
  • git checkout -f
  • 之后将符号链接恢复到该外部文件夹

这意味着post-receive hook看起来像:

git --work-tree=/path/to/deploy checkout -f -- .
ln -s /path/to/pngs /path/to/deploy/png