Ошибка импорта нескольких частных репозиториев с помощью пара

У меня проблемы с импортом нескольких частных репозиториев, кажется, я могу сделать это с 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: "[email protected]:SwiftEverywhere/Model.git", .branch("master")),

        .package(url: "[email protected]: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», «Не удалось прочитать из удаленного репозитория. Пожалуйста, убедитесь, что у вас есть правильные права доступа и репозиторий существует».

Если я удалю зависимость от службы, она сработает, так что, должно быть, я допустил ошибку. Заранее спасибо!

тлдр; В основном мне нужно знать, как настроить файл конфигурации и/или package.swift для использования правильного ключа развертывания.


person SwiftEverywhere    schedule 03.07.2019    source источник
comment
Что такое service.github.com?   -  person imike    schedule 03.07.2019
comment
Я попытался указать другой хост, соответствующий тому, который указан в конфигурации, чтобы использовать этот ключ ????????‍♂️   -  person SwiftEverywhere    schedule 03.07.2019


Ответы (1)


Проблема в том, что вы не можете использовать один ключ в нескольких репозиториях в качестве ключей развертывания, что вы уже заметили.

В соответствии с этой сутью и этими комментариями вы можете обойти это следующим образом:

В вашем Package.swift:

.package(url: "[email protected]:SwiftEverywhere/Model.git", .branch("master")),
.package(url: "[email protected]:SwiftEverywhere/Service.git", .branch("master"))

В вашей SSH-конфигурации (вероятно ~/.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 для всего пользователя. Затем добавьте этого пользователя развертывания в качестве соавтора в свои частные репозитории.

person code28    schedule 05.07.2019
comment
Спасибо за ответ! Я попробую это как можно скорее, правильно ли просто иметь папку .ssh с конфигурацией и ключами, верно? Тогда я должен ссылаться на IdentityFiles как на ./.ssh/model и ./.ssh/service ? Или можно только поместить файл конфигурации и ключи в мой корневой каталог? - person SwiftEverywhere; 05.07.2019
comment
Я не уверен на 100%, но я думаю, что путь должен быть абсолютным, поэтому ./.ssh/model не сработает. Вам нужно указать полный путь, например. /Users/yourname/myproject/.ssh/model - person code28; 05.07.2019
comment
Это дает мне следующую ошибку: Cloning into bare repository \'~/Test/TestPackage-e4ffafc9\'... ssh: Could not resolve hostname github.com-service: nodename nor servname provided, or not known fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists.", output: "Fetching [email protected]:SwiftEverywhere/TestPackage.git Я все еще делаю что-то не так:/ Возможно, единственное решение — проверить локально. Но я думаю, что это должно быть возможно.. - person SwiftEverywhere; 08.07.2019
comment
Похоже, вы не добавили правильную конфигурацию ssh. Вы редактировали файл ~/.ssh/config или где вы его сохранили? Я просто попробовал это точно так, как я описал, и это сработало как шарм. - person code28; 08.07.2019
comment
Файл конфигурации находится в файле .ssh в моем проекте, должен ли я хранить его в .ssh моего корня? - person SwiftEverywhere; 08.07.2019
comment
Хорошо, идеально! Это сделало трюк! Ключ заключался в том, чтобы поместить файл конфигурации в ~/.ssh и использовать статические пути для ключей. Я не могу проголосовать за этот ответ, но это правильный. Большое спасибо! - person SwiftEverywhere; 08.07.2019