Перейти к содержимому

Невозможно извлечь из Git-репозитория через HTTP / HTTPS, но можно с SSH

1

У меня есть Debian под управлением Nginx, на git.example.comкотором я храню репозитории git.

Я могу тянуть / толкать / клонировать через SSH, запустив git clone keeyan@example.com/git/my_repo. ( gitэто символическая ссылка в моем домашнем каталоге, которая указывает на /mnt/primary_storage/git)

Однако, когда я клонирую / вытягиваю с HTTP (S), я получаю следующую ошибку:

fatal: http://git.example.com/my_repo.git/info/refs not valid: is this a git repository? 

Я получаю эту ошибку независимо от того, клонирую ли я реальный репозиторий

Соответствующая часть конфигурации Nginx:

server { listen 80; server_name git.example.com;  root /mnt/primary_storage/git;   location ~ (/.*) { auth_basic "Login"; auth_basic_user_file /mnt/primary_storage/.htpasswd; include fastcgi_params; fastcgi_param REMOTE_USER $remote_user; fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; fastcgi_param GIT_HTTP_EXPORT_ALL ""; fastcgi_param GIT_PROJECT_ROOT /mnt/primary_storage/git; fastcgi_param PATH_INFO $1; fastcgi_pass localhost:9000; }  } 

Раздражает то, что у меня была точно такая же установка, запущенная на другом сервере с Ubuntu, и она работала нормально. Так что я не знаю, что вызывает это. Помимо этой одной проблемы все на сервере работает нормально.

Да, есть несколько подобных вопросов на сайтах StackExchange, но ни один из них не помогает мне. Например, некоторые из них имеют дело с Github, и они не создали хранилище первыми. Другие неправильно указали адрес Git. И другие сказали, что я должен бежать, git config --global http.proxyчто не помогло.

Также я трижды проверил все права доступа к папке / файлу, и все они доступны для чтения и записи от пользователя Nginx.

875 просмотров
KNejad спросил 8 лет назад
K 262

3 ответа

1

Для правильной передачи по HTTP (или любому другому протоколу, который поддерживает упаковку), вам нужно выполнить упаковку вручную.

Вы можете сделать это, запустив его git update-server-infoв каталоге хранилища.

Это может быть удобно, чтобы поместить это в post-updateловушку Git в репо, так что это делается автоматически, когда вы нажимаете.

mtak@gen1:/srv/git/puppet.git/hooks$ cat post-update  #!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update".  exec git update-server-info 

Привет, @mtak. Спасибо за ваш ответ. Я попробовал это, и это, кажется, ничего не делает. Я не знаю, какую отладочную информацию вам дать, поскольку нет вывода.

KNejad · 8 лет назад · 0
mtak ответил 8 лет назад
M 10 928
1

Это сообщение об ошибке аналогично сообщению «Репозиторий не существует».

Проверьте, отображается ли используемый вами URL в разделе «Выбрать и нажать» для команды:

git remote show origin 

Это должно дать результат, как git@git.assembla.com:[REPO-NAME].git.

Если URL неверный, вы можете исправить это командой:

git remote set-url origin [REPO-URL] 

В чем разница между "info / refs not valid" и "info / refs not found"? Так как я получил это в прошлом и видел это онлайн. Я предположил, что ошибка означала, что репо не существует, а "недействительно" означало, что репо найдено, но что-то не так. Я не могу запустить git remote show origin, так как на самом деле у меня нет клонированного репо. Моя проблема с HTTP. SSH работает нормально.

KNejad · 8 лет назад · 0
harrymc ответил 8 лет назад
H 249 057
0

Убедитесь, что репозиторий git, к которому вы пытаетесь получить доступ, поддерживает протокол HTTPS?

Также обратите внимание, что имя хранилища чувствительно к регистру.

Также убедитесь, что URL-адрес хранилища доступен из вашей сети. Возможно, проблема с портом 443 (https).

Убедитесь, что прокси установлен правильно для git, если вы находитесь за прокси!

git config --global http.proxy 

Смотрите также информацию здесь: https://confluence.atlassian.com/bbkb/info-refs-not-valid-is-this-a-git-repository-313467635.html

Надеюсь это поможет.

user1448914 ответил 8 лет назад
U 186