【问题标题】:Composer vcs installs (git repo) wont commit to parent repoComposer vcs install (git repo) 不会提交给父 repo
【发布时间】:2013-10-04 04:12:53
【问题描述】:

当我通过存储库配置中的 vcs 从 BitBucket (git repo) 安装依赖项时,它会克隆 repo。然后,当我提交我的父项目时,它不会提交文件,只是对依赖项 repo 的链接引用。

我该怎么做

a) 在父 git repo 中提交这些文件。以便它们显示在 BitBuckets 界面(以及其他克隆或下载的 zip 文件)中

b) 告诉作曲家下载依赖的 zip 文件而不是克隆 repo。我在 composer.json 中指定了 "preferred-install": "dist" 但它什么也没做。注意:这是一个私有仓库。

【问题讨论】:

    标签: php git version-control bitbucket composer-php


    【解决方案1】:

    首先,您不应该编辑和/或提交在 /vendor 目录(或您定义为该目录的位置)中创建的存储库。

    通常的情况是您包含来自其他人的库,并且您不应该拥有外部存储库的提交权限。如果您想进行更改或实现某个功能,可能会有诸如拉取请求、问题跟踪器等工作流。要获取更新,您需要等待新版本出现,然后致电composer update

    同样的规则适用于您自己的库。您应该已经注意到,当您在主项目中不通过.gitignore 排除/vendor 目录时,Composer 克隆的任何远程存储库都被视为git 子模块。我猜(对它们没有经验)那时将适用具有子模块的通常规则。

    但我建议不要这样开发。你真的应该有两个不同的存储库,每个都可以独立工作——你的库应该与主项目分开开发,任何开发都可以推送到 BitBucket。然后,您可以使用 Composer 更新供应商目录。

    现在 ZIP 下载:如果存储库托管在 Github,Composer 会处理特殊情况。 Github 提供了一个接口来下载存储库的 ZIP 球,其中标签、分支或提交 ID 作为密钥。这些下载是全球可读的,因此不存在身份验证问题。

    您自己的库也可以为该版本的 ZIP 文件提供下载位置。但是,如果您手动进行,要确保始终正确维护它是相当麻烦的。我建议您为此使用软件:Satis (detailed description)。

    Satis 创建至少两个静态文件,您需要将它们托管在可从您的开发机器访问的网络服务器上,并且还可以选择为它在您的存储库中找到的每个标签创建 ZIP 文件。

    然后,您可以将主项目中存储库的手动引用更改为指向该 Satis 托管网络服务器的单个指针。

    每当您在其中一个存储库中创建新标签时,您都会再次运行 Satis 以获取新信息并创建新的 ZIP 文件。

    仅当您提供 ZIP 下载位置时,您才会体验到 preferred-install=dist 选项的不同。如果没有下载位置,Composer 将始终克隆原始存储库。

    【讨论】:

    • 我没有在克隆的 repo 中进行编辑。只是希望将该文件夹中的文件提交给父仓库。我们都认为这可能是一个 git 子模块(即使我没有看到 .gitmodule 配置)我需要提交文件的原因是我在 aws 上使用弹性 beanstalk 并且需要执行 git aws.push,它需要提交的子仓库的完整副本。基本上 beanstalk 是服务器看到的版本的另一个 BitBucket,如果没有提交这些文件,它们永远不会部署在服务器上。
    • 您可以制作一个小更新脚本(以避免手动执行),首先删除供应商文件夹,然后调用 composer install(或更新),然后从所有已安装的库中删除所有 .git 目录.然后在/vendor 中添加并提交任何更改,推送并部署。
    猜你喜欢
    • 2015-01-31
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 1970-01-01
    • 2021-10-29
    • 1970-01-01
    相关资源
    最近更新 更多