使用Composer加载自定义Git仓库

5

我正在编写一个框架,可用于我的未来项目。我想将框架放在私有托管的git服务器上,并在我的未来项目中使用composer加载它。

请问当我进行git init时,是否应该使用“--bare”?我曾经创建了“bare”仓库,但是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"
            }
        }
    }
]

感谢您的选择。
1个回答

9

我正在参考官方文档,了解如何从版本控制系统加载软件包:

https://getcomposer.org/doc/05-repositories.md#using-private-repositories

要求私有项目B,需要在公共项目A的composer.json文件中做两件事:

  1. define the repository as type vcs with the URL to the private repository at your server
  2. require it

    {
        "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。它会将私有项目B获取到A项目的vendor文件夹中。

请问我在 git init 时应该使用“--bare”吗?我曾创建过“bare” repo,但是Composer说找不到package。我查找了很多资料,认为这可能是“缺少composer.json”的原因。

git init --bare创建了一个没有工作树的仓库。这意味着该仓库不包含源文件的工作或检出副本,仅存储了你的repo的Git版本历史记录在仓库的根文件夹中(而不是在.git子文件夹中)。

我用“git clone”将框架克隆到另一个位置,并用Composer加载该位置,但仍然失败。

你不需要通过“git clone”或“git init”存储本地副本,只需直接从私有服务器上用Composer获取即可。

我们有以下情况:

  • 带有“composer.json”的A项目应该从私有repo获取B项目。
  • 不考虑Git,让Composer来获取。不要手动获取。
  • 并且只关注解决此问题的“composer.json”一侧(参见上面的内容)

附注:您发布的第二个“repository”定义了一个“package”。 这在https://getcomposer.org/doc/05-repositories.md#package-2中有描述。 你可以自由地将私有repo作为package要求,但在这里不需要,因为上述的“composer.json”应该工作得很好。


"options": { "ssh2": { "username": "dummy", "privkey_file": "" } } 选项: "ssh2": { "用户名": "dummy", "私钥文件": "" } } - ロジャー
我需要一把钥匙来进入主机。我正在Windows上使用Netbeans。我应该如何定义密钥文件路径?公钥文件也需要吗?另外,请问我该如何在URL git@your-server.com:vendor/my-private-repo.git 中指定端口?谢谢! - ロジャー
1
好的,我已经让它工作了。我使用了Jens提到的配置,但是将URL替换为SSH URL。我在“C:\ Users \ yourname \ .ssh \”中放置了一个带有SSH密钥路径的“config”文件。现在一切都正常工作。请注意,“config”应该像这样:http://nerderati.com/2011/03/17/simplify-your-life-with-an-ssh-config-file/ - ロジャー

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接