Я пытаюсь использовать образ докера 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.
Я думал, что эти две версии были одинаковыми, но это явно не так. В чем разница?
Подумайте о том, чтобы прочитать документы: git-scm.com/book/en/v2/Git-on-the-Server-The-Protocols Очень полезно в этом вопросе.
Спасибо за ссылку @matt «Или вы можете использовать более короткий синтаксис, подобный scp, для протокола SSH:» ... звучит так, будто это выбор клиента и не влияет на сервер ... что еще больше меня смущает, почему это не так. не работает в моем случае
Это странно и мало что для меня значит. Особенно учитывая ссылку от @matt, я ожидал, что оба синтаксиса будут эквивалентны и оба будут работать. Я не знаком с этим образом докера git server, но, насколько я понимаю, оба синтаксиса должны работать.
Я только что заметил, что сообщение об ошибке жалуется на то, что my_repo
не похоже на репозиторий Git, но ваша команда говорит my_repo.git
. Вы уверены, что у вас есть это расширение .git
в вашей команде клонирования? На GitHub или GitLab у вас есть перенаправления, которые автоматически добавят расширение для вас, но если вы используете ssh для связи с самостоятельным репозиторием, вам необходимо указать точный путь с включенным расширением.
@Stephan, я также заметил, что git-server-docker — старая и неподдерживаемая вещь. Последнее обновление было пять лет назад, вероятно, есть много причин, по которым это не очень хороший выбор, скорее всего, включая множество неисправленных уязвимостей. См. github.com/jkarlosb/git-server-docker/issues/30 для возможной альтернативы.
первый работает а второй нет.
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.git
, но, согласно вашему ответу, этот синтаксис предполагает, что /git-server
будет корнем абсолютного пути, а не под ~/
.
@joanis Правда, это зависит от конфигурации сервера SSH, который может через принудительную команду интерпретировать путь по-разному.
Вы проверили свой ответ с помощью этого git-server-docker? Я предполагаю, что он полностью настроен, будучи рецептом докера? Я только что понял, что он древний, однако я только что прокомментировал вопрос о том, почему я вообще буду держаться подальше от этого рецепта докера.
@joanis Нет: я просто указываю, что первый тест, который я бы сделал, — это использовать абсолютный путь с синтаксисом git@localhost:/...
.
Спасибо @VonC! Начальная косая черта действительно является разницей. После добавления во вторую версию этот синтаксис тоже работает. Спасибо!
«…второй не [работает]…» В каком смысле не работает? Ошибка подключения? Тайм-аут? Любые сообщения об ошибках? Разница между этими синтаксисами заключается в том, что в синтаксисе, подобном scp
user@host:path
, вы не можете использовать порт; поскольку вы не устанавливаете порт явно, разницы быть не должно.