【问题标题】:I've configured Composer to download HTMLPurifier locally, but Git won't push all the files to my OpenShift master repo. Why not?我已将 Composer 配置为在本地下载 HTMLPurifier,但 Git 不会将所有文件推送到我的 OpenShift 主存储库。为什么不?
【发布时间】:2014-06-22 02:28:25
【问题描述】:

我已经安装了 Composer,并使用它在本地下载 HTMLPurifier。现在我想将该下载推送到我的 OpenShift Git 存储库。因此,在 Git Bash 窗口中,我运行以下命令...

git add -A :/

git commit -a -m "Uploading HTML Purifier"

git push origin master

此时Git报推送成功,但是当我通过SSHls该目录时,显示HTMLPurifier目录为空。这是为什么?如何让 Git 推送这些文件?

附加信息:我注意到 HTMLPurifier 目录本身确实是一个 Git 存储库,并且在其根目录中包含一个 .gitignore 文件。我尝试删除它并重新运行上述命令,但无济于事......

【问题讨论】:

    标签: github composer-php openshift htmlpurifier


    【解决方案1】:

    您应该尽量避免将下载的依赖项推送到存储库中。建议将vendor 目录添加到顶层.gitignore 文件中。但是您必须做的是提交并推送composer.jsoncomposer.lock

    原因如下:供应商目录由 Composer 管理。运行 Composer 可能会在更新期间做一些小事情,但如果 Composer 团队决定优化一些事情,也可能会做很多事情。

    另外,如果您需要一个包的分支,并且 Composer 知道该包的存储库,它将默认克隆一个 Git 存储库或执行 SVN 检出,而不是尝试获取该分支的 ZIP 包(通常在那里没有办法为分支获取这样的包,即使是普通 Git 存储库中的标记版本也没有这样的下载能力。Composer 知道 Github 提供这样的下载,并通过查看 repo URL 来检测 Github。)

    因此您可以假设 Composer 会将大量存储库元数据放入供应商文件中,如果您盲目地提交这些,事情会变得很糟糕。首先,您提交的文件太多,使您的存储库增加了不必要的数量,这会减慢速度。然后,如果克隆 Git 存储库,这些将被视为子模块,并且有人告诉我这又是一大堆讨厌的事情。如果您只是学习 Git,那么从这些开始可能不是一个好主意。如果您对这些工具(Git 和 Composer)足够了解,那么您可能也不需要它们。

    您尝试提交修改后的供应商目录的原因确实只有一个:如果您的发布过程完全取决于您的一个存储库中存在的所有文件,而没有任何方法可以运行 composer install在发布期间使这些文件出现在目标服务器上。

    在这种情况下,您可以使用 Composer 安装或更新软件包,然后遍历所有创建的目录并删除您遇到的所有 .git.svn(可能还有 .hg 对于 Mercurial)文件夹。只有这样您才能将文件提交到您自己的存储库中。

    但请注意,手动执行此步骤可能是一个乏味的步骤 - 您可能希望创建一个更新脚本来为您完成所有工作。您在更新依赖项时也可能会遇到问题,因为 Composer 期望文件在删除时简单地消失,而不是在写入时受到阻碍。我不能确切地告诉你你会遇到什么,因为这取决于你如何做事,但我希望你会偶然发现一些令人费解的问题。

    底线:尽可能避免将依赖项提交到您自己的存储库中。

    【讨论】:

    • 感谢您的出色回答,是的,现在看来,在删除 HTMLPurifier 目录中的所有 .git 文件/文件夹后,Git 正在成功推送整个包。我需要推送这些文件的原因是因为 OpenShift 使用 Git 为其用户的生产网站托管文件。虽然我可以在网站更新时使用启动脚本运行composer,但每次我想要进行更改时都需要大量开销。对我来说,上传整个依赖真的是最有意义的。
    【解决方案2】:

    尝试使用 -force 选项,您很可能还需要删除 HTMLPurifier 目录中的 .git 目录。

    【讨论】:

    • 我尝试了 -f 标志,但这似乎也不起作用......将 Git 存储库添加到其他 Git 存储库有什么用?这是不允许的吗?我还在学习 Git
    • 通常您需要将其添加为子模块 () 但我不确定 OpenShift 是否会部署子模块。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 2023-03-15
    • 2022-01-27
    • 2018-07-30
    • 1970-01-01
    相关资源
    最近更新 更多