git - 使用 composer 加载自定义 git 存储库

标签 git composer-php

我正在编写一个可用于我 future 项目的框架。 我想把这个框架放到一个私有(private)托管的 git 服务器上,并在我 future 的项目中用 composer 加载它。

我可以知道当我 git init 时,应该使用“--bare”吗? 我曾经创建“裸” repo ,但 Composer 说找不到包。我四处搜索,相信这是由于“缺少 composer.json”造成的。 但是,如果没有“--bare”,我什至无法将代码推送到服务器。我将框架“git clone”到另一个位置,并使用 composer 加载该位置,仍然失败。

我试过下面两个版本,都失败了:

"repositories": [
    {
        "type": "vcs",
        "url": "https://server/git/sdk/"
    }
]

"repositories": [
    {
        "type": "package",
        "package": {
            "name": "vendor/sdk",
            "version": "master",
            "source": {
                "url": "https://server/git/sdk/",
                "type": "git",
                "reference": "master"
            }
        }
    }
]

谢谢。

最佳答案

我正在引用有关如何从 VCS 加载包的官方文档: https://getcomposer.org/doc/05-repositories.md#using-private-repositories

要获取私有(private)项目 B,您需要在公共(public)项目 A 的 composer.json 文件中添加两样东西:

  1. 将存储库定义为 vcs 类型,并使用指向您服务器上私有(private)存储库的 URL
  2. 需要它

    {
        "name": "project A",    
        "description": "public project A requiring private project B",
        "require": {
            "vendor/my-private-repo": "dev-master"
        },
        "repositories": [
            {
                "type": "vcs",
                "url":  "git@your-server.com:vendor/my-private-repo.git"
            }
        ]
    }
    

然后运行 ​​Composer。它将私有(private)项目 B 提取到项目 A 的 vendor 文件夹中。


May I know when I git init, should "--bare" be used? I used to create "bare" repo, but composer said the package is not found. I have searched around, and believe it is due to "missing of composer.json".

git init --bare 创建一个没有工作树的仓库。这意味着存储库不包含源文件的工作副本或 checkout 副本。只有存储库的 git 修订历史记录存储在存储库的根文件夹中(而不是 .git 子文件夹中)。

I "git clone" the framework to another location, and load the location with composer, still failed.

您不需要 git clonegit init 存储库来存储本地副本,只需使用 Composer 直接从私有(private)服务器获取即可。

我们有以下情况:

  • 带有 composer.json 的项目 A 应该从私有(private)仓库中获取项目 B。
  • 我们将 git 排除在外,让 Composer 进行抓取。不要手动获取。
  • 并且只关注 composer.json 方面来解决这个问题(见上文)

旁注:您发布的第二个repository 定义定义了一个package。 这在 https://getcomposer.org/doc/05-repositories.md#package-2 中有描述。 您可以自由地将私有(private)仓库作为一个包来获取,但这里不需要它,因为上面的 composer.json 应该可以正常工作。

关于git - 使用 composer 加载自定义 git 存储库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37654703/

相关文章:

bash - Git Bash - ssh-keygen 不工作(在生成 RSA key 对之前退出)

php - Composer 供应商/文件夹 FTP 上传

git - 为 git clone 禁用 Composer 缓存

php - 加载类映射后 Composer 自动加载文件

php - composer update 给出关于私有(private)存储库元数据的 404

git - 如何在 openshift : Failed to execute: 'control restart' ? 上解决 jbossews

使用接收后脚本在远程上进行 Git sparse-checkout

git - 获取任意分支上最后一次 git 提交的 id

git - 如何使用 Sublime 文本编辑器解决 git merge 冲突?

laravel - 无法在 Laravel 6.0 中使用 Composer 安装软件包