如何使作曲家不为包创建.git目录

A. *_*lai 19 git composer-php

我找到了几个相关的帖子,但那些并没有真正回答我的问题.假设我想安装此软件包: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": "*",
    }
}
Run Code Online (Sandbox Code Playgroud)

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

Sve*_*ven 17

如果将包视为git子模块,则不会将该vendor文件夹排除在提交到您自己的存储库之外.建议将vendor文件夹添加到.gitignore(而不是提交这些文件),只提交composer.lock(composer.json当然).

除此之外,跑步composer install --prefer-dist应该做的工作.请注意,如果您稍后改变主意,Composer似乎不会更改先使用的下载方法.如果Composer检测到克隆的repo,则更新它而不是下载ZIP并解压缩它会更快.如果要更改它,请删除整个vendor文件夹并运行composer update --prefer-dist.


Dan*_*ell 5

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

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

find . -type d | grep .git | xargs rm -rf
Run Code Online (Sandbox Code Playgroud)

请小心在供应商目录(而不是根目录)中运行此文件

  • 通过指定“ vendor”目录可以更简单,更安全:`find vendor -type d -name \ .git -exec rm -rf \ {\} \;` (3认同)
  • **不要使用答案中的命令。** `find grep xargs rm` 命令完全不安全。首先,它会删除“xgit”、“bak.git”、“.github”等目录(因为它使用 `grep .git` 而不是 `grep '\/\.git$'` 之类的目录)。其次,它无法在包含目录的空间中正常工作,并且当“my .git configs”目录存在时,它将删除“my”和“configs”目录(因为它使用“xargs”而不是“-exec”)。请参阅下面我的答案以获得安全命令。 (3认同)