使用 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 密钥。然后将此部署用户作为协作者添加到您的私有存储库。
我在导入多个私有存储库时遇到问题,我似乎可以使用 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 密钥。然后将此部署用户作为协作者添加到您的私有存储库。