Подмодули Git не могут быть использованы при клонировании с частного сервера Git - PullRequest
0 голосов
/ 13 января 2019

Этот вопрос задавался миллионы раз, но всегда в сочетании с использованием публичных git-серверов, таких как github. Я нахожусь в процессе настройки своего собственного частного git-сервера, который, кажется, идет хорошо, вплоть до того момента, когда я пытаюсь клонировать проект с субмодулями, которые я ранее зафиксировал и запихнул сам.

Когда этот вопрос задают в отношении github, всегда кажется, что ответом является то, что необходимо создать пару ключей и зарегистрировать открытый ключ в github. Я был бы рад зарегистрировать мой открытый ключ на моем частном git-сервере, но я не могу найти никакой документации по этому поводу. Это вообще возможно? Даже документация с git-scm.com превращается в ссылку на github.

Мой частный сервер Git - это не что иное, как Raspberry Pi с внешним жестким диском, на котором работает Raspbian lite. Я сделал три проекта, один из которых является основным, а два других добавлены как подмодуль. Я могу создать это как таковое, зафиксировать и нажать, но когда я пытаюсь клонировать его с --recurse-submodules (или без, а затем с подмодулем init / update), подмодули завершаются ошибкой. Однако я могу клонировать субмодули вне рамок основного проекта.

Я дурачился с настройкой сети, и Пи несколько раз менял номер IP. Когда у меня возникли проблемы из-за этого, я установил запись DNS, которая указывает на мой маршрутизатор, и добавил правило переадресации портов к Pi в маршрутизаторе, чтобы я мог эффективно связаться с моим частным сервером со всего мира. Поскольку URL-адреса изменились, и я не хотел, чтобы в них остались остатки старого URL-адреса, я просто снова запустил все три проекта, но это мне не помогло.

Что здесь происходит? Следующий журнал был анонимным. :)

Обновление 1: проблема в аутентификации при клонировании субмодулей. /var/log/auth.log показывает неудачные входы в систему при клонировании подмодуля в рамках клонирования основного проекта:

Jan 13 15:07:56 raspberrypi sshd[3148]: Failed password for git from 192.168.1.18 port 62855 ssh2

Сценарий, который я сделал, который показывает ошибку, а также то, что клон подмодуля вне контекста основного проекта просто успешен:

 E:\Projects>git clone --recurse-submodules ssh://git@git.domain.com/gitdata/Project1.git
Cloning into 'Project1'...
git@git.domain.com's password:
warning: You appear to have cloned an empty repository.

E:\Projects>cp -r Project1.cleanBU/* Project1

E:\Projects>cp -r Project1.cleanBU/.gitignore Project1

E:\Projects>git add Src .gitignore
fatal: not a git repository (or any of the parent directories): .git

E:\Projects>cd Project1

E:\Projects\Project1>git add Src .gitignore

E:\Projects\Project1>git commit
[master (root-commit) 1e52450] Initial commit
 1145 files changed, 726152 insertions(+)
 create mode 100644 .gitignore
...
<<<zapped!>>>
...
 create mode 100644 Src/build.bat

E:\Projects\Project1>git push
git@git.domain.com's password:
Enumerating objects: 550, done.
Counting objects: 100% (550/550), done.
Delta compression using up to 8 threads
Compressing objects: 100% (527/527), done.
Writing objects: 100% (550/550), 1.27 MiB | 3.21 MiB/s, done.
Total 550 (delta 272), reused 0 (delta 0)
remote: Resolving deltas: 100% (272/272), done.
To ssh://git.domain.com/gitdata/Project1.git
 * [new branch]      master -> master

E:\Projects\Project1>git submodule add ssh://git@git.domain.com/gitdata/project2.git Src/project2
Cloning into 'E:/Projects/Project1/Src/project2'...
git@git.domain.com's password:
remote: Counting objects: 202, done.
remote: Compressing objects: 100% (162/162), done.
remote: Total 202 (delta 36), reused 202 (delta 36)
Receiving objects: 100% (202/202), 586.16 KiB | 4.73 MiB/s, done.
Resolving deltas: 100% (36/36), done.

E:\Projects\Project1>git submodule add ssh://git@git.domain.com/gitdata/project3.git Src/project3
Cloning into 'E:/Projects/Project1/Src/project3'...
git@git.domain.com's password:
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (18/18), done.
remote: Total 18 (delta 0), reused 0 (delta 0)Receiving objects:  44% (8/18)
Receiving objects: 100% (18/18), 15.94 KiB | 5.31 MiB/s, done.

E:\Projects\Project1>git add .gitmodules

E:\Projects\Project1>git commit
[master d93cfa4] Added project3 and project2 submodules
 3 files changed, 8 insertions(+)
 create mode 100644 .gitmodules
 create mode 160000 Src/project2
 create mode 160000 Src/project3

E:\Projects\Project1>git push
git@git.domain.com's password:
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 596 bytes | 596.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To ssh://git.domain.com/gitdata/Project1.git
   1e52450..d93cfa4  master -> master

E:\Projects\Project1>cd ..

E:\Projects>rm -rf Project1

E:\Projects>git clone --recurse-submodules ssh://git@git.domain.com/gitdata/Project1.git
Cloning into 'Project1'...
git@git.domain.com's password:
remote: Counting objects: 554, done.
remote: Compressing objects: 100% (259/259), done.
remote: Total 554 (delta 273), reused 549 (delta 272)
Receiving objects: 100% (554/554), 1.27 MiB | 5.96 MiB/s, done.
Resolving deltas: 100% (273/273), done.
Submodule 'Src/project2' (ssh://git@git.domain.com/gitdata/project2.git) registered for path 'Src/project2'
Submodule 'Src/project3' (ssh://git@git.domain.com/gitdata/project3.git) registered for path 'Src/project3'
Cloning into 'E:/Projects/Project1/Src/project2'...
Permission denied, please try again.
Permission denied, please try again.
git@git.domain.com: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://git@git.domain.com/gitdata/project2.git' into submodule path 'E:/Projects/Project1/Src/project2' failed
Failed to clone 'Src/project2'. Retry scheduled
Cloning into 'E:/Projects/Project1/Src/project2'...
Permission denied, please try again.
Permission denied, please try again.
git@git.domain.com: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://git@git.domain.com/gitdata/project2.git' into submodule path 'E:/Projects/Project1/Src/project2' failed
Failed to clone 'Src/project2' a second time, aborting
Cloning into 'E:/Projects/Project1/Src/project3'...
Permission denied, please try again.
Permission denied, please try again.
git@git.domain.com: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://git@git.domain.com/gitdata/project3.git' into submodule path 'E:/Projects/Project1/Src/project3' failed
Failed to clone 'Src/project3'. Retry scheduled
Cloning into 'E:/Projects/Project1/Src/project3'...
Permission denied, please try again.
Permission denied, please try again.
git@git.domain.com: Permission denied (publickey,password).
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
fatal: clone of 'ssh://git@git.domain.com/gitdata/project3.git' into submodule path 'E:/Projects/Project1/Src/project3' failed
Failed to clone 'Src/project3' a second time, aborting

E:\Anheko\Projecten>git clone ssh://git@git.domain.com/gitdata/project2.git
Cloning into 'project2'...
git@git.domain.com's password:
remote: Counting objects: 18, done.
remote: Compressing objects: 100% (18/18), done.
Rremote: Total 18 (delta 0), reused 0 (delta 0)eceiving objects:  44% (8/18)
Receiving objects: 100% (18/18), 15.94 KiB | 5.31 MiB/s, done.

1 Ответ

0 голосов
/ 13 января 2019

Возможно, с помощью git daemon или http (s) это может сработать? Попробую git daemon

git daemon не имеет аутентификации , поэтому не будет запрашивать пароли, что означает, что каждый, кто обращается к вашему серверу, сможет клонировать репозитории.

Я не хочу, чтобы все могли клонировать мои репозитории и 2: я не уверен, как настроить его так, чтобы вам не требовался пароль.

Если ваш сервер использует SSH, вам нужно, чтобы ваш открытый ключ (~/.ssh/id_rsa.pub) был опубликован на git@yourserver:~git/.ssh/authorized_keys: для любого клона вам не нужно вводить пароль (при условии, что ваш закрытый ключ не защищен парольной фразой)

ssh-copy-id git@yourserver

Если ваш сервер использует https-сервер, вам нужно будет кэшировать свои учетные данные (имя пользователя / пароль) через хранилище учетных данных Git (например, на клиенте Windows, это будет * 1021). * используя Microsoft GCM ).

...