Текущая установка:
Сервер: Ubuntu Server 16.04
Версия Gitlab: 10.7.3
Рабочая лошадка Gitlab: 4.1.0
Каталог приложений Gitlab: / opt / gitlab (приложение находится здесь) *
Каталог данных Gitlab: / drive2 / repositories (репозитории созданы и хранятся здесь)
Контекст:
Я собрал работающую установку Gitlab с каталогом данных, указывающим на отдельный раздел для целей резервного копирования,потому что непрерывность данных - это крутая идея, верно?Репозитории, созданные через веб-интерфейс gitlab, хранятся в каталоге данных, как и ожидалось.SSL отлично подходит, поэтому я могу использовать HTTPS для клонирования из этих репозиториев.Кроме того, я могу PUSH к этим репозиториям, используя HTTPS без каких-либо ошибок.
Я также установил ключи SSH и уполномочил пользователя git (созданного установкой omnibus gitlab) проверять эти ключи.Я проверил, что могу успешно туннелировать через SSH на сервер как пользователь git и у меня есть правильные привилегии для записи и чтения каталога данных, где хранятся репозитории.Вот где это становится странным:
Ошибка:
Я могу успешно использовать SSH для клонирования репо с сервера с помощью следующей команды:
git clone git@some_domain.com:user/repo_name.git
Круто.Я менее разочарован в сервере, чем мои родители во мне до этого момента.Итак, я продолжаю, создаю новый файл для добавления в репозиторий, фиксирую (в отличие от моей девушки, которая всегда тащит ее ноги), и, наконец, нажимаю на удаленное начало.И здесь мой мир рушится, как моя мотивация в понедельник утром перед работой:
git push -u origin master
*** Edited Out: Push Stats
remote: GitLab: The project you were looking for could not be found.
To some_domain.com:user/repo_name.git
! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to
'git@some_domain.com:user/repo_name.git'
Я открываю каталог репозитория на сервере gitlab, перехожу в папку перехватчиков, которая содержит символическую ссылку на каталог приложений gitlab, которыйсодержит файл хука предварительного получения.Содержимое файла ловушки предварительного получения здесь:
#!/opt/gitlab/embedded/bin/ruby --disable-gems
# Fix the PATH so that gitlab-shell can find git-upload-pack and friends.
ENV['PATH'] = '/opt/gitlab/bin:/opt/gitlab/embedded/bin:' + ENV['PATH']
#!/usr/bin/env ruby
# This file was placed here by GitLab. It makes sure that your pushed commits
# will be processed properly.
refs = $stdin.read
key_id = ENV.delete('GL_ID')
protocol = ENV.delete('GL_PROTOCOL')
repo_path = Dir.pwd
gl_repository = ENV['GL_REPOSITORY']
def increase_reference_counter(gl_repository, repo_path)
result = GitlabNet.new.pre_receive(gl_repository)
result['reference_counter_increased']
end
require_relative '../lib/gitlab_custom_hook'
require_relative '../lib/gitlab_access'
require_relative '../lib/gitlab_net'
# It's important that on pre-receive `increase_reference_counter` gets executed
# last so that it only runs if everything else succeeded. On post-receive on the
# other hand, we run GitlabPostReceive first because the push is already done
# and we don't want to skip it if the custom hook fails.
if GitlabAccess.new(gl_repository, repo_path, key_id, refs, protocol).exec &&
GitlabCustomHook.new(repo_path, key_id).pre_receive(refs) &&
increase_reference_counter(gl_repository, repo_path)
exit 0
else
exit 1
end
Символическая ссылка на папку приложения gitlab вызывает проблемы в динамическом каталоге, создаваемом этим файлом?
Я совершенно не понимаю, почему SSH не работает, и я так же отчаянно нуждаюсь в помощи, как я отчаянно нуждаюсь в некотором подтверждении своей жизни.Почему команда CLONE успешно находит каталог, а команда PUSH - нет?Все указывает мне на файл хука, но я никогда не занимался этим, и помощь была бы более ценной, чем подарочная карта за 5 долларов через три недели после дня рождения.
Спасибо, StackOverflow!