【问题标题】:After Git push and deployment an auto-generated file gets deleted在 Git 推送和部署之后,自动生成的文件被删除
【发布时间】:2015-08-23 18:13:35
【问题描述】:

我们在/var/www/ 位置有一个带有 WordPress 项目的 PHP 服务器。整个/www/ root 都在 Git 的源代码控制之下。所以当我推送新代码时,它会立即部署,我们会得到新的新代码。

在某些时候,我们在服务器上使用了图像构建工具,该工具从我们将某些数据放入某个包之类的数据中生成图像。

/var/www/images/*.png

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

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

【问题讨论】:

    标签: git deployment


    【解决方案1】:

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

    如果取决于部署的完成方式 (Git 2.3+ has a push to deploy, for instance)。
    Usually, this is a post-receive hook,它会做一个

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

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

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

    一种解决方案是:

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

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

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

    【讨论】:

    • 整个 www/ 包正在部署...如果我设法将图像设置在 / www/ 之外,则无法从 Web 服务器访问这些图像。 ...如果对这个方向有任何想法,请告诉我
    • @AmitRana 符号链接将恢复访问。它将使这些图像被视为服务器,就好像它们在 www/ 中一样。
    • @AmitRana 但至少,使用符号链接选项,结帐 -f 只会清除该符号链接,而不是图像。恢复符号链接很容易。恢复擦除的ouy图像不是。
    猜你喜欢
    • 2019-03-19
    • 2012-02-20
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 2023-01-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多