我能使用Composer拉取特定的提交吗?

43

是否可以使用Composer获取特定的拉取请求?比如从fork中获取某个特定的提交记录?指令应该是什么样子的?

编辑:背景这将非常有帮助,因为我不必等待创建新标记。我确定它将被合并,但我不知道开发人员什么时候能有机会,而我宁愿不拖延当前的工作流程...

编辑2:现在我想了想,当开发人员创建一个公共包的fork时,他们可能需要在一两个项目中测试自己的fork,然后才推送拉取请求。

编辑3:示例我试图获取此提交记录https://github.com/valorin/dispatcher/commit/c566eb6902f378abd59943e7ea09f61e734c8960,但没有成功,我尝试了:

    "valorin/dispatcher": "develop#c566eb6902f378abd59943e7ea09f61e734c8960"

    "indatus/dispatcher": "develop#c566eb6902f378abd59943e7ea09f61e734c8960"

编辑4:大成功

"require": {
        "indatus/dispatcher": "dev-develop#c566eb6"
}

添加 dev- 前缀就解决了问题。

3个回答

47

你无法直接引用拉取请求,但是你可以随时获取特定的提交记录。你只需要找到拉取请求引入的提交哈希值。(如果你在使用 Github,则可以在“commits”选项卡中找到它)。

然后你需要在你的 composer.json 文件中使用类似下面的内容 -

 "require": {
    "mysoftware/thesoftware": "dev-master#3f38376d"
}

其中mysoftware/thesoftware是通常使用的供应商/软件名称,右侧'#'之后的部分是您想要的特定提交哈希。


21

建议并已批准的解决方案适用于下载已合并到主存储库中的提交。

如果您想要从一个尚未合并的拉取请求(Pull Request)中下载提交,那么您需要遵循不同的方法。

假设您有包vendor/package,且"RandomUser"在GitHub上创建了一个分支,命名为patch-1,并向其提交了一些编辑内容,您希望通过composer下载它们进行测试。

此时,您的composer.json必须以以下方式编写:

{
    "type": "project",
    "license": "proprietary",
    "require": {
        ...
        "vendor/package": "dev-patch-1#1234567890",
        ...
    },
    ...
    "repositories": [
        {
            "type": "vcs",
            "url": "https://github.com/RandomUser/Package.git"
        }
    ]
}

正如你所看到的,在 composer.json 文件的 require 部分,你像往常一样请求包,但是你添加了特定的分支 dev-patch1,将其前缀改为 dev- 以降低最小稳定性至 dev,并添加了特定的提交 ID #1234567890

然后,你还需要添加提交 PR 的用户的特定存储库:这使得 Composer 能够下载 git 存储库,检查其中存在的分支,读取其 composer.json 文件并用它来安装你需要的依赖项。


1
感谢您的解释。我想补充一点,最后您只需要运行 composer update vendor/package 即可。 - boryn

0

是的:你只需要提交ID。比如说,如果你想拉取这个提交到Ardent(Laravel框架,PHP) - 你可以通过以下方式强制提交到该提交:

"require": {
    "laravelbook/ardent": "master#9fbe73399d84fc726dc9e122955de444f4fb4901"
}

要从 fork 中拉取,只需要在 require 中指定该 fork 即可。例如,这是我的一个 fork 另一个仓库。要获取该提交,我可以这样要求。

"require": {
    "JoeChilds/Swiftlet": "master#effd5c59f398d56fec261cf1d73a7397cdf78a56"
}

1
这是一个公共仓库吗?如果是的话,你能给我提供链接吗? :-) - Joe
尝试拉取此链接:https://github.com/valorin/dispatcher/commit/c566eb6902f378abd59943e7ea09f61e734c8960 - Moak
它在develop分支上,所以你需要develop#c566eb6902f378abd59943e7ea09f61e734c8960master分支的提交是master#7369a94ef15736e81d8138185a2118a2b4179945 - Joe
5
刚才看了一下,发现“develop”无法使用,于是在谷歌上搜索后得知需要使用“dev-develop”,回来后发现你也刚刚找到了,哈哈。好的,很高兴你解决了这个问题 :) - Joe
3
这是完全错误的。"Could not parse version constraint." 希望它能够工作。 - user3751385
显示剩余2条评论

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