如何让composer不为包创建.git目录

问题描述 投票:0回答:5

我找到了一些相关的帖子,但这些并没有真正回答我的问题。 假设我想安装这个包: https://github.com/pear/Net_Socket

摘自我的composer.json:

{
    "config": {
        "preferred-install": "dist"
    },
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/pear/Net_Socket.git"
        }
    ],
    "require": {
        "pear/net_socket": "*",
    }
}

所以我需要它在没有 .git 目录的情况下安装,这样它在我的项目中不会被视为子模块。 我如何让它下载“dist”版本,就像其他人所说的那样?我必须标记提交吗?

git composer-php
5个回答
20
投票

如果包被视为 git 子模块,则您尚未将

vendor
文件夹排除在提交到您自己的存储库之外。建议将vendor文件夹添加到
.gitignore
,并且不提交这些文件,只提交
composer.lock
(当然还有
composer.json
)。

除此之外,运行

composer install --prefer-dist
应该可以完成这项工作。请注意,如果您稍后改变主意,Composer 似乎不会更改首先使用的下载方法。如果 Composer 检测到克隆的存储库,则直接更新它比下载 ZIP 并解压它更快。如果您想更改它,请删除整个
vendor
文件夹并运行
composer update --prefer-dist


2
投票

使用 --prefer-dist 是唯一的本机解决方案,但有时会出现根本没有可用的打包版本的情况,在这种情况下,Composer 仍会回退到 git 克隆。

我知道的唯一解决方法是在 Composer 安装后运行清理脚本来删除 Git 目录。也许是这样的命令:

find . -type d | grep .git | xargs rm -rf

请小心在您的供应商目录中运行此命令,而不是您的根目录


2
投票

composer update --prefer-dist
工作正常,但更改作曲家包(composer.json)的默认下载方法可能会更简单:

{
"config": {
    "preferred-install": {
        "*": "dist"
    }
  }
}

https://getcomposer.org/doc/06-config.md#preferred-install


1
投票

要安全地仅删除“vendor”目录中的“.git”目录,请使用:

find vendor -type d -name '.git' -exec rm -rf \{\} \+

0
投票

即使 Q 已经提出很长时间了,但愿这也能很好地发挥作用。 它在composer.json中

"scripts": {       
    "post-update-cmd": ["echo [WARNING] Delete all .git dirs", "rm -rf vendor/**/**/.git"],
    "post-install-cmd": ["echo [WARNING] Delete all .git dirs", "rm -rf vendor/**/**/.git"]
},
© www.soinside.com 2019 - 2024. All rights reserved.