Git Push-ошибка крюка предварительного получения отклонена


168

Я запустил gitlabhq rails server на виртуальной машине, выполнив 1-6 шагов из этого учебного руководства https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md и запустил команду rails server, выполняющую команду sudo -u git -H bundle exec rails s -e production. После этого я создал пользователя с помощью инструментов администратора и создал новый проект под этим пользователем. Затем я пытаюсь подтолкнуть существующий проект к этому репо, как всегда. Но на последнем этапе git push origin masterпроисходит ошибка с ошибкой

[удалено отклонено] master -> master (обработчик предварительного приема отклонен)

Дополнительная информация:

1) Я не активировал пользователя (владельца проекта) по ссылке активации по электронной почте, потому что я не настроил почтовый сервис на стороне сервера и не нашел инструкций, как это сделать в этом руководстве.

2) Сервер Gitlab генерирует советы, как подтолкнуть проект к репо, и его нет repositories/в пути. Я имею в виду, что он генерирует, git@mygitlabhost:user/repo.gitа git@mygitlabhost:repositories/user/repo.gitне правильно.

3) Когда я пытался отладить ее, я открыл pre-receiveсценарий внутри репо на сервере и попытался выходной переменными (есть три из них): refs = ARGF.read, key_id = ENV['GL_ID']и repo_path = Dir.pwdи обнаружил, что KEY_ID всегда пустой. Может быть, проблема здесь ... Если это так, пожалуйста, дайте мне советы, как это исправить. Спасибо


15
Клянусь, в каждой команде разработчиков программного обеспечения есть по крайней мере 1 человек, который каждый день просыпается и думает, как сделать жизнь других разработчиков намного сложнее.
Самайо

Похоже, что есть очень популярный ответ, который должен работать для большинства людей. В моем случае, однако, то же сообщение было получено от Git Hub, когда случайно произошел еще один пуш от другой машины при попытке пуша.
Hack-R

Ответы:


230

GitLab по умолчанию помечает masterветку как protected(см. Часть Protecting your codeв https://about.gitlab.com/2014/11/26/keeping-your-code-protected/ почему). Если так в вашем случае, то это может помочь:

Откройте ваш проект> Настройки> Репозиторий и перейдите в раздел «Защищенные ветви», найдите в списке «главную» ветку, нажмите «Снять защиту» и попробуйте снова.

через https://gitlab.com/gitlab-com/support-forum/issues/40

Для версии 8.11 и выше с практическими рекомендациями здесь: https://docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-termin-users


8
Пользовательский интерфейс немного изменился: после проекта «Настройки» перейдите на вкладку «Хранилище». Тогда «Защищенные ветви»
Донн Ли

У меня была та же проблема, что и у OP, и это решение помогло мне, спасибо! Но теперь мне интересно, почему? Я использовал Gitlab некоторое время, и вдруг я это сделал? Что изменилось?
Эндрю Ламарра

2
Так GitLab 8.11как параметры немного изменились, проверьте детали здесь
Arghya C

сталкивается с той же проблемой. Здесь я даже не могу подтолкнуть другую ветку. Я толкаю это первый раз, хотя.
Сантош Кадам

1
я удалил незащищенный, но что теперь будет? Кто-нибудь еще в мире может работать над этим репо?
Флаттерер

14

Следующая проблема решена на моей локальной машине:

A. Во-первых, убедитесь, что вы используете правильные данные для входа в систему для подключения к Bitbucket Server (т. Е. Имя пользователя / пароль / ключ SSH, который принадлежит вам) 

B. Затем убедитесь, что имя / адрес электронной почты правильно заданы в вашей локальной конфигурации Git: установите локальную конфигурацию Git для учетной записи, под которой вы пытаетесь нажать (проверка подтверждает, что вы являетесь тем человеком, который зафиксировал файлы) * Обратите внимание, что это чувствительно к регистру, как для имени, так и для адреса электронной почты * Это также чувствительно к пробелам - некоторые учетные записи компании имеют дополнительные пробелы / символы в своем имени, например. " Contractor/ space space(LDN)" Вы должны включить в свою конфигурацию то же количество пробелов, что и на Bitbucket Server. Проверьте это в блокноте, если застряли.

C. Если вы использовали не ту учетную запись, просто измените учетные данные своей учетной записи (имя пользователя / пароль / ключ SSH) и повторите попытку.

D. Иначе, если ваша локальная конфигурация неверна, вам нужно будет изменить ее

Для MAC

open -a TextEdit.app ~/.gitconfig

ПРИМЕЧАНИЕ. Вам придется исправить старые коммиты, которые вы пытались нажать.

  1. Изменить свой последний коммит:

    > git commit --amend --reset-author
    
      
    <save and quit the commit file text editor that opens, if Vim then
    :wq to save and quit>
    
  2. Попробуйте повторно подтолкнуть ваши коммиты:

    > git push
    

12

В моем случае моя команда привела к созданию репо (репо было пусто) и назначило меня разработчиком, чтобы, когда я непосредственно нажимал на код, чтобы справиться с ошибкой, с которой я столкнулся. ! [remote rejected] master -> master (pre-receive hook declined)Так как это было исправлено, он назначил меня помощником, чтобы я смог подтолкнуть код прямо к мастеру.


10

Кажется, проблема в некоторых сервисах, таких как sidekiq. Запуск sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=productionвыводит все проблемы с конфигом.



2

Возможно, у вас нет доступа разработчика к проекту или основной ветке. Вам нужен доступ dev, чтобы подтолкнуть новую работу.

Новая работа означает новые ветви и коммиты.


2

Может быть и не так, но это было решением моей ошибки « отклонено до получения ответа »:

Есть некоторые репозитории, которые разрешают модификации только через Pull Request . Это означает, что вы должны

  1. Создайте новую ветку, взяв за основу ветку, в которую вы хотите отправить свои изменения.
  2. Зафиксируйте и перенесите изменения в новую ветку.
  3. Откройте Запрос на извлечение, чтобы объединить вашу ветку с оригинальной.

0

Вам нужно добавить свой ssh-ключ в вашу учетную запись git, если он выдает ошибку, удалите предыдущий ssh-ключ и создайте новый ssh-ключ, затем добавьте.


Это не помогло. :( Проверено на обеих учетных записях - root и myuser на vm и локальной машине соответственно.
Hroft,

проверьте git remote -v, ваш git repo добавлен или нет?
Хардик Хардиа

'git remote -v' выводит: origin git @ mygitlabhost: репозитории / пользователь / repo.git (выборка) origin git @ mygitlabhost: репозитории / user / repo.git (push)
Хрофт

Если вы используете размещенный gitlab, проблема, скорее всего, на их стороне. Просто повторите попытку через несколько минут.
Эрик Аронесты

0

Я решил эту проблему путем изменения remote 'origin' urlот httpк gitпротоколу в.git/config


0

Зайдите в Настройки проекта -> Крючки -> (Под) Предварительно полученные крючки

Отключить cp требовать ссылки на проблему в коммитах


0

Я наткнулся на ту же ошибку, используя BitBucket. У меня было локальное Git-репозиторий, для которого я хотел создать резервную копию в сети, поэтому я создал новый репозиторий из своей учетной записи BitBucket (используя веб-интерфейс).

После запуска git remote add origin git@bitbucket.org:StatMarianne/<a private repo>.gitя побежал git push origin masterбезрезультатно (обычно я не использую опцию -u с git pushтем, что не против набирать полные имена репо и веток при толкании и вытягивании).

Ошибка читается:

remote: You're not allowed to write to this repository.
To bitbucket.org:StatMarianne/<a private repo>.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'git@bitbucket.org:StatMarianne/<a private repo>.git'

Но моя локальная ветвь успешно работала, когда я запускался git push -u origin master(строго следуя инструкциям BitBucket).

Я нахожу это удивительным, так как -u ( --set-upstream) должен только «добавить ссылку вверх по течению (отслеживание) ...».


-1

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.