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.

3 ответа3

1

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

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

git remote show origin

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

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

git remote set-url origin [REPO-URL]
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
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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .