Неможливо витягти зі сховища 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.

Відповіді:


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

1

Це повідомлення про помилку є таким же, як і "Сховище не існує".

Переконайтеся, що URL-адреса, яку ви використовуєте, відображається під командою Fetch and Push:

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

0

Переконайтеся, що git repo, який ви намагаєтеся отримати доступ, підтримує протокол 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

Сподіваюся, що це допомагає.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.