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

svgewumm  于 2023-11-15  发布在  Git
关注(0)|答案(5)|浏览(116)

我找到了一些相关的帖子,但它们并没有真正回答我的问题。假设我想安装这个包: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”版本,就像其他人说的那样?我必须标记一个提交吗?

r55awzrz

r55awzrz1#

如果一个软件包被看作是一个git子模块,那么你还没有排除vendor文件夹被提交到你自己的仓库中。建议你将vendor文件夹添加到.gitignore中,并且不要提交这些文件,只提交composer.lock(当然还有composer.json)。
除此之外,运行composer install --prefer-dist应该可以完成这项工作。请注意,Composer似乎不会改变先使用的下载方法,如果您稍后改变主意。如果Composer检测到克隆的存储库,则只需更新它而不是下载ZIP并解压缩它会更快。如果您想要更改,请删除整个vendor文件夹并运行composer update --prefer-dist

00jrzges

00jrzges2#

使用--prefer-dist是唯一的原生解决方案,但在某些情况下,根本没有可用的打包版本,在这种情况下,Composer仍然会退回到git clones。
我所知道的唯一解决方法是在composer安装后运行一个清理脚本来删除Git目录。也许是这样的命令:

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

字符串
请注意在您的供应商目录下运行此程序,而不是根目录

vatpfxk5

vatpfxk53#

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

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

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

zzlelutf

zzlelutf4#

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

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

字符串

q5lcpyga

q5lcpyga5#

即使Q已经提出了很长时间,也可以很好地工作。

"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"]
},

字符串

相关问题