如何在 Git 仓库中包含 Composer 依赖项

How to include Composer dependencies in a Git repo

在使用像 Silverstripe 这样的框架创建网站时,我经常想使用像 gridfieldextensionslumberjack 这样的辅助模块。

因此我使用 composer require 添加依赖项。

然而,当我按照我的常规开发工作流程并使用 git add -A 将模块添加到存储库而不是将代码添加到存储库时,我得到了对它的引用。

当我尝试在其他地方克隆站点时(使用 Jenkins 或其他开发人员),这会导致问题。 git clonegit pull 留下一个空目录。

我通过删除模块的 .git 目录并添加所有文件来解决这个问题。

有更好的方法吗?使用 git submodule 是一个选项吗?

我在某个地方找到了一个很好的 .gitignore 文件,它忽略了所有内容,我必须告诉它包含我的项目的自定义模块。就像:

# ignore everything...
/*

# ...but
!/.htaccess
!/.gitignore
!/composer.json
!/composer.lock

!/Capfile
!/Gemfile
!/favicon.ico
!/touch-icon-*


!/mysite
!/some-module
#...other modules

# theme stuff
!/themes/
**/.sass-cache
**/node_modules

!**/node_modules/_manifest_exclude

#no assets in general, but /assets/.htaccess
!/assets
/assets/*
!assets/.htaccess

正如 FinBoWa 所说,您的项目中需要 composer.jsoncomposer.lock 文件,并且 运行

composer install

在另一台机器上,它将安装保存在该机器上 composer.lock 文件中的版本的软件包

composer install --no-dev

只会安装 "normal" 要求,不会 dev-requirements 像 phpunit 或其他你只需要用于开发或测试而不是上线的东西

composer install --no-dev -o

还将优化 (-o) 自动加载程序,因此它会更快一些。

composer update

将更新您的包,这可能会产生有趣的副作用并破坏您的网站。所以慎重使用,事后测试。

composer update silverstripe/framework

只会更新那个包,最后

composer update silverstripe/*

将更新供应商 silverstripe 的所有包(例如框架和 cms 包)

另请参阅: