无法在 Windows 的作曲家中使用远程存储库

Posted

技术标签:

【中文标题】无法在 Windows 的作曲家中使用远程存储库【英文标题】:Cannot use remote repository in a composer on windows 【发布时间】:2016-09-05 05:27:30 【问题描述】:

我有一个带有库的存储库。可以成功克隆。

$ git clone file:////remote/repo/library
$ cd library
$ composer validate
./composer.json is valid, but with a few warnings

但似乎无法通过作曲家包含使用此存储库。

...
"repositories": [
    
        "type": "git",
        "url": "file:////remote/repo/library"
    ]
 ...

尝试安装

$ composer install -vvv
... 
Loading composer repositories with package information
Executing command (//remote/repo/library): git show-ref --tags
Executing command (//remote/repo/library): git branch --no-color --no-abbrev -v
Executing command (//remote/repo/library): git branch --no-color
Executing command (//remote/repo/library): git show "master":composer.json

  [Composer\Repository\InvalidRepositoryException]
  No valid composer.json was found in any branch or tag of 
  file:////remote/repo/library, could not load a package from it.
...

如何通过作曲家在 Windows 上使用远程存储库?

【问题讨论】:

这是一个位于网络路径 \\remote\... 上的存储库吗? 你可以共享文件夹并使用像“//192.168.1.10/myrepo”这样的IP地址吗? 【参考方案1】:

Composer 将能够计算出您使用的是哪种 VCS,因此请尝试使用 "type": "vcs",而不是 "type": "git"(请参阅 Composer docs 和 this SO answer)。

如果您只想指向本地存储库而不是克隆它或使用特定于 git 的操作(如版本标签等),则可以通过 path reference 使用它,而不是使用 git 克隆。

同样在 Windows 上,您可能需要对存储库/库路径使用 Windows 样式格式(请参阅 Composer - using a local repository SO 评论),如果它是 Windows 共享驱动器,您可能需要检查权限.

编辑

我对此进行了更深入的了解,并且能够非常轻松地重现 git clonecomposer install 行为,即使只查看我自己 PC 的网络名称。

尝试使用 Windows 风格的语法(即file://\\\\remote\\repo\\library)对我不起作用,因为它在某个地方的 git 进程中间掉了下来。

看起来在 composer 内部交互的命名网络驱动器存在一些问题:因为您可以使用所描述的 file:// 语法将存储库加载到本地磁盘上,并且可以使用正常的从网络驱动器正确克隆和获取文件//drive/repo 语法和命令行 git 我不确定这是否一定可以在不深入研究作曲家源代码的情况下解决(这是get local Windows drive support 需要发生的事情)。

这意味着将您的网络驱动器位置设置为映射到本地计算机上的一个字母(根据smcjones' answer)也可以正常工作,因为它将被视为与本地 Windows 驱动器相同。如果您想自动映射/取消映射驱动器,您还可以添加挂钩,正如@smcjones 指出的那样(尽管您必须记住不要将该驱动器号分配给其他任何东西)。

假设您可以访问相关计算机,在您希望从中提供服务的本地网络计算机上设置git daemon(使用this answer 非常简单),因此您可以使用git:// 协议版本很好,尽管根据您的设置,您可能还需要确保您的 "minimum-stability" flag 设置为 "dev",如果您不通过 HTTPS 传输,您可能需要查找本地 composer 配置文件(可能在 @ 987654343@) 并将"secure-http": false 添加到它以通过网络提供服务,而无需设置 SSL 证书(除非您想设置它)。

【讨论】:

我觉得这个值得一试。 git 类型或 vsc 类型无关紧要。路径很奇怪,它只是将 repo 复制到项目的根目录中。我需要使用远程存储库,所以我需要远程路径。 @sectus 路径版本仍然会以类似方式运行并且需要更新,您只是无法利用它作为存储库。我进行了更多故障排除并设法重现了答案并进行了更多研究,我的答案已更新。 @Leith ,这很有趣。我会尝试使用“git://”协议。 @Leith:这没有很好的文档记录,但是使用 Windows 路径有效,而 file://// 似乎失败了。该路径必须可以使用 Windows 驱动器路径和使用 Windows 语法(正斜杠 OK)又名 C:/ 或 Z:/ 访问【参考方案2】:

您可以尝试添加一个package repository 类似to this one

基本上,您定义的信息与 composer 存储库的 packages.json 中包含的信息相同,但仅限于单个包。 同样,最低必填字段为nameversion,以及distsource

(见also this example)

然后检查问题是否仍然存在。

以防万一,先检查是否:

deleting folders from vcs(即~/.composer/cache/vcs/*C:\Users\Me\AppData\Local\Composer\vcs)有帮助。 有no autorun message

【讨论】:

这可能是一种解决方法,但它也不起作用。【参考方案3】:

如果您打算将此共享用作 repo 服务器,或从多个位置提取此 repo,您​​可能希望使用 Leith's answer 设置 Git 守护程序,或者您可以查看设置 SSH server在 Windows 10 上。这些需要在网络上进行额外的设置。

下面的方法对于那些只是试图将某些东西打补丁并且不想处理服务器配置或守护进程的人很有用。它不需要访问服务器权限,只需要您有权访问网络上的位置。

最快的做法是手动或自动映射您的网络驱动器。在命令行中,如果要映射到“R”:

net use R: \\remote\repo

或者,您可以使用 composer 的 script 功能自动设置它并构建一个小的 .cmd 文件以在 pre-update-cmdpost-update-cmd 上执行:

map_drive.cmd:

if not exist r: (
    net use R: "\\remote\path\to\repo"
)

您可以对post-update-cmdpost-install-cmd 执行相同的操作来取消映射网络驱动器。

unmap_drive.cmd

if exist r: (
    net use R: /delete
)

composer.json:

\..
"scripts": 
    "pre-install-cmd": [
        "map_drive.cmd"
    ],
    "pre-update-cmd": [
        "map_drive.cmd"
    ],
    "post-install-cmd": [
        "unmap_drive.cmd"
    ],
    "post-update-cmd" [
        "unmap_drive.cmd"
    ]

...

现在可以直接访问了。

\...
"repositories": [
    
        "type": "git",
        "url": "R:/library"
    ]
 ...

请注意,尽管@Leith 指出您必须使用file://r/ 代替R:/,但我发现file 协议不适用于我的Windows 设置。使用适合您的语法!

你是使用这个补丁方法还是更复杂的方法取决于你的应用和使用。在某些情况下,运行 git 守护进程或 SSH 服务器可能会被视为令人烦恼,并且会增加更多开销。如果您只打算临时或偶尔使用它,上面的脚本应该可以让您运行。

【讨论】:

这是可能的解决方法,但这不是一种方便的方法。 已编辑,尽管我在 Composer for WIndows 上进行了测试,并且驱动路径有效。 @sectus 我使用composer.json 编辑使其自动工作。

以上是关于无法在 Windows 的作曲家中使用远程存储库的主要内容,如果未能解决你的问题,请参考以下文章

如何使用作曲家从命令行添加非公共存储库?

从主 GITHUB 存储库拆分子树并创建作曲家包的问题

将作曲家存储库集成到 php 文件中

为 wordpress 主题和插件创建满足作曲家的私有存储库

如何从本地 Windows 存储库推送到 Windows git 远程服务器

作曲家:找不到命令