关于 Laravel 项目下 composer.lock 文件是否需要版本控制器的讨论
说明
默认安装的 Laravel 会把 composer.lock
放在 .gitignore 文件中, 不加入 git 的版本跟踪, 我倒是偏向于去除掉此行, 也就是把 composer.lock
加入版本控制., 下面说下我的理由:
什么是 composer.lock 文件?
composer.lock
文件是当你第一次使用 composer install
或者 执行 composer update
后生成的文件, 此文件里定义了当前项目的代码依赖, 还有最重要的, 这些代码依赖的对应的版本.
composer.lock 文件作用是什么?
默认情况下, 当执行 composer install
的时候, Composer
会检查当前项目是否有 composer.lock
文件, 如果有的话, 就会按照此文件去下载代码依赖和其指定的版本.
好处
把 composer.lock
文件加版本的好处有以下:
- 团队开发的时, clone 下代码后, 使用
composer install
可以确保大家使用的依赖包都是同一个版本的, 避免没必要的混乱; - 在一个现有的项目上开发的时候, 执行
composer update
后, 偶尔会发现刚刚更新了某个代码包把程序整挂了, 这个时候, 如果composer.lock
是加入版本控制器的话, 直接一个git diff
命令, 就可以查看到这次更新了那个包, 快速定位到问题的所在; - 在线上部署的时候, 可以确保线上生成环境下使用所有代码是和开发时候使用的一致, 因为
composer.lock
会确保你在执行composer install
命令后, 按照文件里面指定的版本去下载代码依赖包;
想听听大家是怎么看待这个问题的?
Thanks @overture
其实个人的理解是这样的:
-
应用 (Project), 就是说是独立项目而不被其它项目依赖的,是推荐把 composer.lock 文件加入版本控制的,保证开发人员安装后的环境是一样的。
- 工具类 (Library), 用于别人依赖使用的,不建议把 composer.lock 加入版本控制,因为很容易与其它包的依赖版本造成冲突。
其实个人的理解是这样的:
上一条回复里第二条有误,在 library 里放 composer.lock 不会造成冲突,但是 composer 并不去读它,也就是说没什么用。放不放对于依赖者都没影响,官方说明:
当然需要。。实践一下就知道了。
我认为也是需要的,本地和开发 环境确保 安装包版本一致,环境一致. so 用docker镜像的好处就完全体现
我认为,将composer.json文件里的package指定好版本就可以了,composer.lock加入版本控制造成的冲突会很多。