Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 测试和调试Composer插件_Php_Git_Composer Php - Fatal编程技术网

Php 测试和调试Composer插件

Php 测试和调试Composer插件,php,git,composer-php,Php,Git,Composer Php,我正在为专有软件开发一个定制的composer安装程序,但我并不确定应该如何测试和调试它 Composer仅在指定为依赖项时加载插件,因此我创建了一个测试项目,将插件定义为依赖项,如下所示: { //... "repositories": [ { "type":"git", "url":"/path/to/gitrepo" } ], "require":{ "myven

我正在为专有软件开发一个定制的composer安装程序,但我并不确定应该如何测试和调试它

Composer仅在指定为依赖项时加载插件,因此我创建了一个测试项目,将插件定义为依赖项,如下所示:

{
    //...
    "repositories": [
        {
            "type":"git",
            "url":"/path/to/gitrepo"
        }
    ],
    "require":{
        "myvendor/my-plugin":"dev-master"
    }
}
"repositories": [
    {
        "type": "path",
        "version": "dev-master",
        "url": "/home/user/log-viewer"
    }
],
$ composer require louisitvn/log-viewer:dev-master
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing louisitvn/log-viewer (dev-master)
    Symlinked from /home/user/log-viewer
问题是composer只使用最新提交的版本,这意味着如果我想测试某个东西,我必须先提交它。这导致了很多“无用”的单行更改提交(比如“哦,我忘了一个逗号了”),我真的不想在我的git回购历史中有这些内容


我想一定有更好的办法,但我没有找到。理想情况下,我会将目录定义为存储库(这将是我的工作目录),但据我所知,没有什么比“目录”类型的存储库更好的了

您只需在本地编辑供应商包的代码即可。当稍后的composer想要更新这个包时,它会询问您如何处理修改过的文件。在这种情况下,您只需选择
s
来存储更改。另请参见,以了解可用选项的含义

更新包后,将重新应用您的更改

有关示例对话框,请参见屏幕:

为此,我使用
标签和
强制推送
到库repo。
所以在我的项目中,我有

{
    //...
    "repositories": [
        {
            "type":"git",
            "url":"/path/to/gitrepo"
        }
    ],
    "require":{
        "myvendor/my-plugin":"dev-tag"
    }
}
当我在我的库repo中做一些更改时,我用
dev标记重新标记上次提交,然后

git push origin master --force --tags
因此,我的标记实际上是最后一次库提交。之后我只做

composer update
我的项目中有所有的库代码


不要将此工作流与生产代码中使用的标记一起使用

对于开发,最好将您正在进行的工作作为
路径
类型引用。在主应用程序中,在
存储库中设置一个包,如下所示:

{
    //...
    "repositories": [
        {
            "type":"git",
            "url":"/path/to/gitrepo"
        }
    ],
    "require":{
        "myvendor/my-plugin":"dev-master"
    }
}
"repositories": [
    {
        "type": "path",
        "version": "dev-master",
        "url": "/home/user/log-viewer"
    }
],
$ composer require louisitvn/log-viewer:dev-master
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing louisitvn/log-viewer (dev-master)
    Symlinked from /home/user/log-viewer
然后需要你的插件

composer require louisitvn/log-viewer:dev-master
这里的关键是要求您的包作为
dev master
。输出可能如下所示:

{
    //...
    "repositories": [
        {
            "type":"git",
            "url":"/path/to/gitrepo"
        }
    ],
    "require":{
        "myvendor/my-plugin":"dev-master"
    }
}
"repositories": [
    {
        "type": "path",
        "version": "dev-master",
        "url": "/home/user/log-viewer"
    }
],
$ composer require louisitvn/log-viewer:dev-master
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing louisitvn/log-viewer (dev-master)
    Symlinked from /home/user/log-viewer

如您所见,Composer在
vendor/
中为插件创建了一个符号链接,而不是克隆它,并且您始终掌握工作目录中的最新更改。

虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。@mishik我没有选项来实现该图像。@AbcAeffchen,感谢您为我实现该图像。