• 技术文章 >开发工具 >composer

    composer下载的内容需不需要提交到git呢?

    藏色散人藏色散人2021-06-08 15:46:56转载56
    下面由composer教程栏目给大家介绍关于composer下载的内容需不需要提交到git的问题,希望对需要的朋友有所帮助!

    具体问题:

    想问一下各位使用Composer的同学,通过Composer下载后的文件你们会把内容提交到Git上吗?
    在官方的Faq上看到Should I Commit the dependencies in my vendor directory这篇文章,有建议是不提交到Git,那么应该如何处理切换分支就要重新composer install这个问题呢?如果将vendor提交到版本库,那又应该如何处理包里面带有的.git文件夹呢?

    *修正 composer update 应该为 composer install

    解决办法:

    事实上无论是分支开发,还是部署到生产环境,无论composer.json中版本号的通配符规则你怎么写,我们最关心的永远是一个最根本内容:开发当时,我们用的所有依赖库,具体的版本号是哪一个?

    而这个内容是composer.lock文件支持的。composer 本身通过维护 lock 文件,记录了依赖库产生任何改动之后,项目中所有依赖库的具体版本。请阅读关于此文件的文档(https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file)。

    你应当永远把composer.lock文件提交到版本库,并在切换分支或部署之后,使用composer install安装 lock 文件中指定的具体依赖版本。

    从这个意义上讲,你是否将vendor目录提交到主版本库都是对的。提交与否这是一个互有取舍的选择:

    如果提交:

    优势:“拉取即用”的便利。

    劣势:信息重复。因为你开发当时的具体版本,lock 文件已经记录。也就是说vendor文件夹表述了同一件事情。

    劣势:引入不一致性的风险。因为虽然 Composer 保证 lock 文件和vendor目录一致,但提交到 git 版本库毕竟是一个人工行为。你难以保证哪一次不会落下二者之一。

    如果不提交,优劣势反过来。不再重复。

    我的想法是:我建议你坚持“正确性优于易用性”的思想。我的建议是不提交vendor,仅仅使用 lock 文件维持开发当时的依赖库版本。

    如果提交的话,请务必遵循以下两个准则:

    (1)务必保证vendor和composer.lock这两个文件的提交是同步的。提了一个,必须提另一个。
    任何开发,如果任何一次 commit 只交了其中一个,必须追责。
    这个的理由是:虽然我们提交vendor保证拉取下来立刻可用,但是 git 是有部分检出(checkout)功能的 —— 对于一个 Composer 项目,我有权遵照 Composer 项目的惯例,不检出vendor目录,而是拉取下来实务代码之后随手一个composer install,你不能说我错。
    (如果谁说这个是错的,我支持你分分钟上sf和知乎曝光你的无良公司和技术主管)

    (2)务必按照Composer对于提交vendor文件夹的建议(https://getcomposer.org/doc/faqs/should-i-commit-the-dependencies-in-my-vendor-directory.md),忽略掉子库的所有.git目录,只提交vendor中的实务代码。
    相信我,vendor中的实质代码,和vendor/**/.git下git库本身的管理用文件,绝对是冰山的水上部分和水下部分的关系。不忽略,会死人的,不夸张。

    另外必须指出的是:分支开发时,就算不通过版本库同步vendor,而只同步composer.lock,也不会造成时间的浪费。

    两个分支切换时,无非是两套具体版本换来换去。而 Composer 本身对所有下载的库都是缓存的。每次拉分支之后的composer install必然命中全部的缓存,而不需要重复消耗下载的时间。

    以上就是composer下载的内容需不需要提交到git呢?的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:segmentfault,如有侵犯,请联系admin@php.cn删除
    专题推荐:composer
    上一篇:用Composer安装特定版本的软件包 下一篇:没有了
    第16期线上培训班

    相关文章推荐

    • 解决git-bash下composer命令无法使用的问题• 解决ThinkPHP5.1版本引入composer vendor扩展包的问题• composer怎么设置为全局可使用• composer怎么修改php版本• 用Composer安装特定版本的软件包

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网