为啥 Git 在部署后会覆盖服务器上的文件?

Posted

技术标签:

【中文标题】为啥 Git 在部署后会覆盖服务器上的文件?【英文标题】:Why is Git overwriting files on server after deploying?为什么 Git 在部署后会覆盖服务器上的文件? 【发布时间】:2011-11-09 11:16:35 【问题描述】:

我在 heroku 上有一个 node.js 应用程序,它将图像保存在 public/productimages 文件夹中。但是每次我推送我的新代码时,所有以前的图像都会被删除。我在 .gitignore 文件中添加了 productimages 但没有用。我本地计算机中的 public/productimages 是空的。

【问题讨论】:

你为什么要推?在这种情况下不是更好吗? 怀疑他根本不是 Git 意义上的“推动”,而是使用 Heroku 的 gem 进行部署 运行git status时,是否显示图片在排队等待删除? 评论者,这是 Heroku。这不是 Git 问题。使用 git push heroku master 将应用程序简单地部署到 Heroku。 @meagar heroku gem 未部署。使用git push 将应用程序部署到heroku。 Heroku 运行带有 post-receive 挂钩的分布式 git 服务器,以将应用程序部署到 Heroku 网格上的多个服务器。 【参考方案1】:

云计算的基本前提:存储不是持久的,除非明确规定。

未使用 Heroku,但我相信如果您的文件没有版本控制并且无法从您的存储库中获取,则不会保留它们。

【讨论】:

【参考方案2】:

您不能使用文件系统在 Heroku 上进行永久存储。

原因是 Heroku 每次启动您的应用程序时,都会在一个全新的临时目录中启动它。每次 Heroku 关闭您的应用程序时,它都会删除您的应用程序之前运行的临时目录。Heroku 每晚都会这样做,每次您git push,每次您更改配置变量时,每次您更改插件时,每次您增加或减少测功机数量等的时间。

必须使用外部服务(例如 PostgreSQL 数据库或 S3)来存储您可能想要存储的任何内容。

【讨论】:

以上是关于为啥 Git 在部署后会覆盖服务器上的文件?的主要内容,如果未能解决你的问题,请参考以下文章

git 部署项目 - 文件权限 - (chmod)

git pull后为啥分支没有更新

git 本地服务器和远程文件内容一样为啥显示有冲突

git部署

使用 Git Hook 实现网站的自动部署

部署后如何在 Heroku 中维护不在 git repo 中的文件