[英]“git push” deletes untracked remote files
我正在运行一个Web服务器,该服务器允许用户将图像上传到服务器。 但是,我使用git来管理源代码,并且git push
操作会删除服务器上与本地结帐不匹配的任何内容-因此,每次运行git push
时,我都会丢失图像!
起初我以为我可以保护上载文件夹,所以我尝试了其他帖子中建议的所有这些操作:
git rm --cached -r uploads
git update-index --assume-unchanged uploads
这些都不能解决问题-当我执行git push
时,远程目录总是消失。
接下来,我决定将上传的文件放在git的工作区域之外,以便git push
不会删除它。 然后,我创建了从公共目录到私有目录的符号链接 ,以便可以公开查看文件。 到目前为止一切顺利...但是,每当我运行git push
它都会删除符号链接!
最后,我认为也许我每次按下时都可以使用接收后 git钩子来创建符号链接,但是我的Web服务器(openshift)已经在将该钩子用于其他操作,并且不允许我对其进行编辑。
肯定有一种简单的方法吗? 请帮忙!
与大多数平台即服务提供商一样,每次push
时,OpenShift都会部署应用程序的全新版本 。 默认情况下,Git不会跟踪的任何内容都不会包含在新版本中。
您有两种选择:
OpenShift支持使用特殊目录进行持久数据存储 :
存储必须在部署之间持久保存的文件的最佳实践是使用位于git存储库上一层的'data'目录。 您可以使用$ OPENSHIFT_DATA_DIR env变量在主机上引用此变量。 例如:
如果您创建一个名为“ bunny”的php应用程序。 存储库的php / index.php文件被部署到:
〜/ {墨盒名称} /repo/php/index.php
然后,将数据目录部署到
〜/ {墨盒名称} / app-root / data /
因此,从php / index.php文件中,如果将文件保存到“ ../../../data/blah.txt”,它将被放置在您的repo目录之外,进入数据目录。
将生成/上传的资产存储在其他位置。
这是Heroku等PaaS提供商所青睐的方法。 与其将用户上传的内容和其他生成的内容存储在PaaS服务器上,不如将其存储在Amazon S3之类的东西上 。
您应该使用部署动作挂钩在OPENSHIFT_DATA_DIR中创建符号链接,您可以在以下WordPress快速入门中查看如何执行此操作的示例: https : //github.com/openshift/wordpress-example/blob/master/.openshift/ action_hooks /部署
OPENSHIFT_DATA_DIR在部署之间保持不变,但在扩展应用程序中的齿轮之间不共享。
是的,您要推送到的git repo不应是具有工作目录的存储库。 它应该是一个以以下内容启动的bare
仓库
git --bare init
如果仍要在目标计算机上工作,最好的解决方案是使用两个存储库(一个为裸仓库,另一个为非仓库),将其推入裸仓库,然后使用钩子将其拉回正常状态。 可以在此处找到此设置的示例。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.