git - 基于gitlab的composer私有(private)包被识别为git子模块

标签 git composer-php gitlab git-submodules satis

我在公司的gitlab上为composer做了一些私有(private)包。 但是当其他项目需要我的私有(private)包时,它被识别为git子模块,所以我无法将它推送到生产环境。

我关注 composer document改变我项目的 composer.json。
我也试试 Satis , 但它打开了相同的结果---子模块。

当我将包存储在 Github 上时,它运行良好!

是gitlab的问题吗?
谢谢!

最佳答案

Composer 正在使用 git 克隆您的包,而不是下载它们。当 composer 通过 packagist 从 github 下载包时,它会下载文件的存档 (.tar.gz),然后将其解压缩到您的 vendor 目录中。当它获取你的私有(private)仓库时,它找不到存档,所以它直接用 git 克隆它。这个克隆将有一个 .git 目录,就像一个普通的克隆存储库一样。

典型的解决方案是将vendor/ 目录添加到您的.gitignore。但是,如果您有特殊情况,可以通过创建自己的 archives with satis 来解决这个问题。 .

来自 satis 文档:

{
    "archive": {
        "directory": "dist",
        "format": "tar",
        "prefix-url": "https://amazing.cdn.example.org",
        "skip-dev": true
    }
}

如果您这样做,您的包将在安装到 vendor 目录之前被归档。将没有 .git 目录,因此它不会被视为子模块。

关于git - 基于gitlab的composer私有(private)包被识别为git子模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26861934/

相关文章:

php - 调用模型 [App\Team] laravel 6 上的未定义关系 [users]

使用命名空间找不到 PHP 类

docker - 安装 npm 包时 GitLab CI/CD 管道错误 [找不到 package.json 文件]

node.js - 如何通过 https 使用私有(private) GitLab 存储库作为带有私有(private) token 的 npm 依赖项

url - gitlab克隆URL没有命名空间?

ruby-on-rails - 如何在客户端(浏览器、iPhone、Android)之间共享代码

git - 我如何使用 JGit 进行 git push?

git-svn密码更改

php - 通过 HTTPS 使用具有私有(private) GitHub 存储库的 Composer

php - 只为 Laravel 5 中的一个环境启用全局中间件