使用 vapor 导入多个私有存储库时出错

Error importing multiple private repositories with vapor

我在导入多个私有存储库时遇到问题,我似乎可以使用 1. 所以我想知道是否有人可以告诉我我做错了什么。 我的项目结构是这样的: 在 Package.swift 所在的项目根目录中:

--.ssh
    --config
    --model
    --model.pub
    --service
    --service.key

package.swift 的内容:

import PackageDescription

let package = Package(
    name: "Server",
    products: [
        .library(name: "Seerver", targets: ["App"]),
    ],
    dependencies: [
        //  A server-side Swift web framework.
        .package(url: "https://github.com/vapor/vapor.git", from: "3.0.0"),

        //  Swift ORM (queries, models, relations, etc) built on SQLite 3.
        .package(url: "https://github.com/vapor/fluent-sqlite.git", from: "3.0.0"),

        .package(url: "git@github.com:SwiftEverywhere/Model.git", .branch("master")),

        .package(url: "git@service.github.com:SwiftEverywhere/Service.git", .branch("master"))
    ],
    targets: [
        .target(name: "App", dependencies: ["FluentSQLite", "Vapor", "Model", "Service"]),
        .target(name: "Run", dependencies: ["App"]),
        .testTarget(name: "AppTests", dependencies: ["App"])
    ]
)

配置内容:

Host github.com
    HostName github.com
    User git
    IdentityFile ./.ssh/model
Host service.github.com
    HostName github.com
    User git
    IdentityFile ./.ssh/service

我将密钥添加到各自的存储库中作为部署密钥。我无法在不同的存储库上使用相同的密钥。我以为我可以通过将主机更改为 service.github.com 以使其使用另一个密钥来做到这一点,但它似乎无法像这样工作。我也试过更改用户和主机名,但没有成功。

我在 运行 'vapor update' 时收到的错误是 "Could not read from remote repository. Please make sure you have the correct access rights and the repository exists"

如果我删除服务依赖性它确实有效,所以那一定是我犯了错误的地方。提前致谢!

tldr;基本上我需要知道如何配置配置文件 and/or package.swift 以使用正确的部署密钥。

问题是,您不能在多个存储库上使用一个密钥作为部署密钥,这一点您已经注意到了。

根据 this gist and those comments 你可以这样解决:

在你的 Package.swift:

.package(url: "git@github.com-model:SwiftEverywhere/Model.git", .branch("master")),
.package(url: "git@github.com-service:SwiftEverywhere/Service.git", .branch("master"))

在你的SSH-config(可能~/.ssh/config):

Host github.com-model
    HostName github.com
    User git
    IdentityFile ~/.ssh/model

Host github.com-service
    HostName github.com
    User git
    IdentityFile ~/.ssh/service

另一个解决方法是创建一个部署用户,并将部署密钥作为用户范围的 ssh 密钥。然后将此部署用户作为协作者添加到您的私有存储库。