如何强制git不替换文件夹内容?

时间:2014-11-17 01:16:00

标签: php git cloudcontrol

我在cloudcontrol.com上托管我的php项目,在我的项目中,我有一个静态文件夹,用于保存用户个人资料图片,如下所示:

uploads/profile/userpic1.jpg
uploads/profile/userpic2.jpg
uploads/profile/userpic2.jpg

我.gitignore配置文件夹中的所有文件与.gitignore文件:

*
!.gitignore

在我的本地环境中,当我进行一些测试时,我在该文件夹中上传了一些照片。 在我的生产环境中,用户还可以更改其个人资料图片并将其保存在该文件夹中。

我的问题是:

每当我将任何更新推送到生产服务器时,我都丢失了服务器上配置文件目录中的所有文件! 似乎git(或cloudcontrol)REPLACE配置文件目录不仅更新其内容而不触及旧文件/图片。

任何建议如何解决这个问题。我认为这只是一个.gitignore问题,我尽一切努力使这项工作,但我无法做到。我是Git和PaaS的新手。

谢谢

2 个答案:

答案 0 :(得分:3)

与大多数云应用程序托管服务商一样,cloudControl会在部署时替换完整的应用程序文件夹。通常这样做是为了允许水平扩展并确保每个部署都基于相同(空)状态。

另请参阅non-persistent filesystem上的文档:

  

非持久性文件系统

     

TL; DR:

     
      
  • 每个容器都有自己的文件系统。
  •   
  • 文件系统不是持久的。
  •   
  • 不要在文件系统上存储上传内容。
  •   
     

cloudControl平台上的部署可以访问可写文件系统。但是,这个文件系统并不持久。在将来的请求中,写入的数据可能会或可能不会再次访问,具体取决于routing tier如何跨可用容器发出请求,并在每次部署后删除。这包括手动触发的部署,还包括在正常操作期间由平台本身完成的重新部署。

     

对于客户上传(例如用户个人资料图片),我们建议将对象商店(如Amazon S3或GridFS功能)作为MongoLab Add-on的一部分提供。

因此,如果您想动态存储文件,则必须为此单独寻找解决方案。

答案 1 :(得分:0)

这就是使用git的大多数部署应用程序的工作原理。在任何情况下,git不是最适合版本化资产,它应该主要用于代码。话虽如此,只要您在要版本化的内容和不想要版本化的内容之间有明确的标识符,您仍然可以使用.gitignore。说所有你自己的文件都以单词version开头,你可以做这样的事情

/public/assets/images/users/*
!/public/assets/images/users/version*