繁体   English   中英

“ git push”删除未跟踪的远程文件

[英]“git push” deletes untracked remote files

我正在运行一个Web服务器,该服务器允许用户将图像上传到服务器。 但是,我使用git来管理源代码,并且git push操作会删除服务器上与本地结帐不匹配的任何内容-因此,每次运行git push时,我都会丢失图像!

起初我以为我可以保护上载文件夹,所以我尝试了其他帖子中建议的所有这些操作:

  • 将目录添加到.gitignore,
  • git rm --cached -r uploads
  • git update-index --assume-unchanged uploads

这些都不能解决问题-当我执行git push时,远程目录总是消失。

接下来,我决定将上传的文件放在git的工作区域之外,以便git push不会删除它。 然后,我创建了从公共目录到私有目录的符号链接 ,以便可以公开查看文件。 到目前为止一切顺利...但是,每当我运行git push它都会删除符号链接!

最后,我认为也许我每次按下时都可以使用接收后 git钩子来创建符号链接,但是我的Web服务器(openshift)已经在将该钩子用于其他操作,并且不允许我对其进行编辑。

肯定有一种简单的方法吗? 请帮忙!

与大多数平台即服务提供商一样,每次push时,OpenShift都会部署应用程序的全新版本 默认情况下,Git不会跟踪的任何内容都不会包含在新版本中。

您有两种选择:

  1. 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目录之外,进入数据目录。

  2. 将生成/上传的资产存储在其他位置。

    这是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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM