Разница между ssh:// и git@ версией строки подключения git

Я пытаюсь использовать образ докера git server для настройки локального сервера git.

Моя конфигурация для создания докеров такова:

  git-server:
    image: jkarlos/git-server-docker
    restart: always
    ports:
      - "22:22"
    volumes:
      - ./docker/git-server/keys:/git-server/keys
      - ./docker/git-server/repos:/git-server/repos

При такой настройке из следующих двух версий первая работает, а вторая нет.

git clone ssh://git@localhost/git-server/repos/my_repo.git
git clone git@localhost:git-server/repos/my_repo.git

Вторая версия дает это сообщение об ошибке:

Cloning into 'my_repo'...
fatal: 'git-server/repos/my_repo.git' does not appear to be a git repository
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

Я думал, что эти две версии были одинаковыми, но это явно не так. В чем разница?

«…второй не [работает]…» В каком смысле не работает? Ошибка подключения? Тайм-аут? Любые сообщения об ошибках? Разница между этими синтаксисами заключается в том, что в синтаксисе, подобном scp user@host:path, вы не можете использовать порт; поскольку вы не устанавливаете порт явно, разницы быть не должно.

phd 27.11.2022 15:54

Подумайте о том, чтобы прочитать документы: git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols Очень полезно в этом вопросе.

matt 27.11.2022 15:58

Спасибо за ссылку @matt «Или вы можете использовать более короткий синтаксис, подобный scp, для протокола SSH:» ... звучит так, будто это выбор клиента и не влияет на сервер ... что еще больше меня смущает, почему это не так. не работает в моем случае

Stephan 27.11.2022 16:51

Это странно и мало что для меня значит. Особенно учитывая ссылку от @matt, я ожидал, что оба синтаксиса будут эквивалентны и оба будут работать. Я не знаком с этим образом докера git server, но, насколько я понимаю, оба синтаксиса должны работать.

joanis 27.11.2022 17:02

Я только что заметил, что сообщение об ошибке жалуется на то, что my_repo не похоже на репозиторий Git, но ваша команда говорит my_repo.git. Вы уверены, что у вас есть это расширение .git в вашей команде клонирования? На GitHub или GitLab у вас есть перенаправления, которые автоматически добавят расширение для вас, но если вы используете ssh для связи с самостоятельным репозиторием, вам необходимо указать точный путь с включенным расширением.

joanis 27.11.2022 18:11

@Stephan, я также заметил, что git-server-docker — старая и неподдерживаемая вещь. Последнее обновление было пять лет назад, вероятно, есть много причин, по которым это не очень хороший выбор, скорее всего, включая множество неисправленных уязвимостей. См. github.com/jkarlosb/git-server-docker/issues/30 для возможной альтернативы.

joanis 27.11.2022 21:00
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
6
86
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

первый работает а второй нет.

git clone ssh://git@localhost/git-server/repos/my_repo.git

Да, он получил доступ к абсолютному пути /git-server/repos/my_repo.git

git clone git@localhost:git-server/repos/my_repo.git

Он пытается получить доступ к относительному пути git-server/repos/my_repo.git.

Использование абсолютного пути должно работать лучше:

git clone git@localhost:/git-server/repos/my_repo.git
                        ^^^^

Или, если репозиторий не по адресу /git-server, а, /another/path/to/git-server/...

git clone git@localhost:/another/path/to/git-server/repos/my_repo.git
                        ^^^^^^^^^^^^^^^^^^^^^^
                        # full and complete path

Если этот ответ правильный, то документация на github.com/jkarlosb/git-server-docker вводит в заблуждение. Они предлагают загрузить репозиторий Git в ~/git-server/repos, а затем получить к ним доступ через git clone ssh://git@<ip-docker-server>:2222/git-server/repos/myrepo.gi‌​t, но, согласно вашему ответу, этот синтаксис предполагает, что /git-server будет корнем абсолютного пути, а не под ~/.

joanis 27.11.2022 20:55

@joanis Правда, это зависит от конфигурации сервера SSH, который может через принудительную команду интерпретировать путь по-разному.

VonC 27.11.2022 20:57

Вы проверили свой ответ с помощью этого git-server-docker? Я предполагаю, что он полностью настроен, будучи рецептом докера? Я только что понял, что он древний, однако я только что прокомментировал вопрос о том, почему я вообще буду держаться подальше от этого рецепта докера.

joanis 27.11.2022 20:58

@joanis Нет: я просто указываю, что первый тест, который я бы сделал, — это использовать абсолютный путь с синтаксисом git@localhost:/....

VonC 27.11.2022 21:04

Спасибо @VonC! Начальная косая черта действительно является разницей. После добавления во вторую версию этот синтаксис тоже работает. Спасибо!

Stephan 27.11.2022 23:59

Другие вопросы по теме