Почему `git clone —depth = 1 ` завершается с ошибкой для некоторых репозиториев с HTTP 500?

#git

#git

Вопрос:

Я использую локальное развертывание Stash в качестве сервера Git.

При клонировании определенных репозиториев, например https://stash.mydomain.net/scm/~be2274/chef-repo.git , все работает, если я клонирую без --depth=1 , но в противном случае происходит сбой:

git clone без --depth=1 :

 $ git clone -v --bare 'https://stash.mydomain.net/scm/~be2274/chef-repo.git'
Cloning into bare repository 'chef-repo.git'...
POST git-upload-pack (gzip 1765 to 943 bytes)
remote: warning: unable to find all commit-graph files
remote: Enumerating objects: 434, done.
remote: Counting objects: 100% (434/434), done.
remote: Compressing objects: 100% (433/433), done.
remote: Total 14489 (delta 310), reused 0 (delta 0)
Receiving objects: 100% (14489/14489), 1.90 MiB | 646.00 KiB/s, done.
Resolving deltas: 100% (9806/9806), done.
  

git clone с --depth=1 :

 $ git clone -v --bare --depth=1 'https://stash.mydomain.net/scm/~be2274/chef-repo.git'
Cloning into bare repository 'chef-repo.git'...
POST git-upload-pack (180 bytes)
error: RPC failed; HTTP 500 curl 18 transfer closed with outstanding read data remaining
fatal: the remote end hung up unexpectedly
  

Почему Git завершается с ошибкой, когда --depth=1 в качестве опции git clone предоставляется возможность клонировать только самую последнюю фиксацию? Я понятия не имею, почему это происходит, и сообщение об ошибке не содержит реальной информации.

Какие сценарии приведут git clone --depth=1 <url> к сбою HTTP 500 ?

Комментарии:

1. Проверьте журналы на стороне сервера; посмотрите, завершается ли Git там рано по какой-либо причине, и если да, то в чем причина.

2. @torek — У меня нет доступа к ним: (

3. Знаете ли вы, какой сервер обслуживает запросы git на другом конце (gitlab, gitolite, gitea, обычный git http-сервер …)? и, возможно, его версия?

4. Код состояния HTTP 500 означает внутреннюю ошибку на сервере, вы можете сообщить об этой проблеме поставщику сервера, попросив их проверить, что произошло в фоновом режиме.

Ответ №1:

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

Поскольку это проблема на стороне сервера, вы ничего не можете сделать, чтобы исправить ее на стороне клиента или иным образом решить ее там. Возможно, вы сможете обойти это, решив не вызывать Git таким образом, который его запускает, но дефект находится на сервере и должен быть исправлен там. Если бы была проблема с тем, что вы делали на стороне клиента, вы бы получили ошибку серии 400, а не ошибку серии 500.

Если вы не управляете сервером, вы должны сообщить о проблеме тому, кто это делает, чтобы он мог предпринять соответствующие шаги для ее решения.