Git Push Fehler Pre-Receive Hook abgelehnt

167

Ich habe den gitlabhq-Rails-Server auf einer virtuellen Maschine ausgeführt und dabei 1-6 Schritte in diesem Tutorial ausgeführt: https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.mdsudo -u git -H bundle exec rails s -e production . Der Befehl zum Ausführen des Rails-Servers wird gestartet . Danach habe ich mit Admin-Tools einen Benutzer erstellt und unter diesem Benutzer ein neues Projekt erstellt. Dann versuche ich, das bestehende Projekt wie immer in dieses Repo zu verschieben. Aber im letzten Schritt git push origin masterschlägt mit dem Fehler fehl

[Remote abgelehnt] Master -> Master (Pre-Receive-Hook abgelehnt)

Zusätzliche Information:

1) Ich habe den Benutzer (Projektbesitzer) nicht über den E-Mail-Aktivierungslink aktiviert, da ich den Postdienst auf der Serverseite nicht konfiguriert habe und in diesem Handbuch keine Anweisungen dazu gefunden habe.

2) Der Gitlab-Server generiert Tipps, wie das Projekt zum Repo verschoben werden kann, und es befindet sich kein repositories/Pfad. Ich meine, es erzeugt git@mygitlabhost:user/repo.gitstattgit@mygitlabhost:repositories/user/repo.git was richtig ist.

3) Wenn ich versuche , es zu debuggen, öffnete ich pre-receiveSkript in Repo auf dem Server und versuchte, Ausgangsvariablen (es gibt drei von ihnen): refs = ARGF.read, key_id = ENV['GL_ID']und repo_path = Dir.pwdund fand, dass key_id ist immer leer. Vielleicht liegt das Problem hier ... Wenn ja, geben Sie mir bitte Vorschläge, wie Sie das beheben können. Vielen Dank

Hroft
quelle
13
Ich schwöre, es gibt mindestens eine Person in jedem Softwareentwicklungsteam, die jeden Tag aufwacht und darüber nachdenkt, wie man das Leben anderer Entwickler viel schwieriger macht.
Samayo
Es sieht so aus, als gäbe es eine sehr beliebte Antwort, die für die meisten Menschen funktionieren muss. In meinem Fall wurde jedoch dieselbe Nachricht von Git Hub empfangen, als versehentlich ein weiterer Push von einem anderen Computer ausgeführt wurde, als versucht wurde, einen Push durchzuführen.
Hack-R

Antworten:

230

GitLab markiert den masterZweig standardmäßig als protected(siehe Teil Protecting your codeunter https://about.gitlab.com/2014/11/26/keeping-your-code-protected/ why). Wenn ja, kann dies in Ihrem Fall helfen:

Öffnen Sie Ihr Projekt> Einstellungen> Repository und gehen Sie zu "Geschützte Zweige", suchen Sie den Zweig "Master" in der Liste und klicken Sie auf "Schutz aufheben" und versuchen Sie es erneut.

über https://gitlab.com/gitlab-com/support-forum/issues/40

Informationen zur Version 8.11 und höher finden Sie hier: https://docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-certain-users

Max Vyaznikov
quelle
8
Die Benutzeroberfläche hat sich etwas geändert: Klicken Sie nach dem Projekt "Einstellungen" auf die Registerkarte "Repository". Dann "Protected Branches"
Donn Lee
Ich hatte also das gleiche Problem, das OP hatte, und diese Lösung funktionierte für mich, danke! Aber jetzt frage ich mich, warum? Ich benutze Gitlab schon eine Weile und plötzlich habe ich das getan? Was hat sich geändert?
Andrew Lamarra
2
Da sich GitLab 8.11die Optionen etwas geändert haben, überprüfen Sie die Details hier
Arghya C
vor dem gleichen Problem. Hier kann ich nicht einmal andere Branchen pushen. Ich drücke es aber zum ersten Mal.
Santosh Kadam
1
Ich habe ungeschützt entfernt, aber was wird jetzt passieren? Kann irgendjemand auf der Welt an diesem Repo arbeiten?
Flutterer
14

Folgendes behobenes Problem auf meinem lokalen Computer:

A. Stellen Sie zunächst sicher, dass Sie die richtigen Anmeldedaten verwenden, um eine Verbindung zum Bitbucket-Server herzustellen (z. B. einen Benutzernamen / ein Kennwort / einen SSH-Schlüssel, der Ihnen gehört). 

B. Stellen Sie dann sicher, dass der Name / die E-Mail-Adresse in Ihrer lokalen Git-Konfiguration korrekt eingestellt ist: Legen Sie Ihre lokale Git-Konfiguration für das Konto fest, unter das Sie pushen möchten (die Prüfung bestätigt, dass Sie die Person sind, die die Dateien festgeschrieben hat) * Beachten Sie, dass sowohl für den Namen als auch für die E-Mail-Adresse zwischen Groß- und Kleinschreibung unterschieden wird. * Es wird auch zwischen Leerzeichen unterschieden. Einige Unternehmenskonten enthalten zusätzliche Leerzeichen / Zeichen in ihrem Namen, z. " Contractor/ space space(LDN)". Sie müssen dieselbe Anzahl von Leerzeichen in Ihre Konfiguration aufnehmen wie auf Bitbucket Server. Überprüfen Sie dies im Editor, wenn Sie nicht weiterkommen.

C. Wenn Sie das falsche Konto verwendet haben, wechseln Sie einfach Ihre Kontoanmeldeinformationen (Benutzername / Passwort / SSH-Schlüssel) und versuchen Sie es erneut.

D. Andernfalls müssen Sie Ihre lokale Konfiguration ändern, wenn sie nicht korrekt ist

Für MAC

open -a TextEdit.app ~/.gitconfig

HINWEIS: Sie müssen die alten Commits korrigieren, die Sie pushen wollten.

  1. Ändern Sie Ihr letztes Commit:

    > git commit --amend --reset-author
    
      
    <save and quit the commit file text editor that opens, if Vim then
    :wq to save and quit>
    
  2. Versuchen Sie, Ihre Commits erneut zu verschieben:

    > git push
    
Maverick09
quelle
12

In meinem Fall führte mein Team dazu, ein Repo zu erstellen (Repo war leer) und mich als Entwickler zuzuweisen. Als ich direkt auf den Code drückte, um den Fehler zu meistern, mit dem ich konfrontiert war ! [remote rejected] master -> master (pre-receive hook declined), wurde behoben, dass er mir als Betreuer zugewiesen wurde, also ich konnte den Code direkt an den Master senden.

Saad Qamar
quelle
10

Das Problem scheint bei einigen Diensten wie Sidekiq zu liegen. Beim Ausführen werden sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=productionalle Probleme mit der Konfiguration ausgegeben.

Hroft
quelle
2

Möglicherweise haben Sie keinen Entwicklerzugriff auf das Projekt oder den Hauptzweig. Sie benötigen Entwicklerzugriff, um neue Arbeiten voranzutreiben.

Neue Arbeit bedeutet neue Niederlassungen und Verpflichtungen.

Vishav Premlall
quelle
2

Könnte nicht der Fall sein, aber dies war die Lösung für meinen " Pre-Receive Hook abgelehnt" Fehler " ":

Es gibt einige Repositorys, die nur Änderungen über Pull Request zulassen . Das bedeutet, dass Sie müssen

  1. Erstellen Sie einen neuen Zweig, der als Basis den Zweig verwendet, in den Sie Ihre Änderungen übertragen möchten.
  2. Übernehmen Sie Ihre Änderungen und übertragen Sie sie in den neuen Zweig.
  3. Öffnen Sie eine Pull-Anfrage, um Ihren Zweig mit dem ursprünglichen zusammenzuführen.
Rocío García Luque
quelle
0

Sie müssen Ihren SSH-Schlüssel zu Ihrem Git-Konto hinzufügen. Wenn ein Fehler auftritt, löschen Sie den vorherigen SSH-Schlüssel und erstellen Sie einen neuen SSH-Schlüssel. Fügen Sie dann hinzu.

Hardik Hardiya
quelle
Das hat nicht geholfen. :( Getestet auf beiden Konten - root und myuser auf VM und lokalem Computer resp.
Hroft
check git remote -v, dein git repo wurde hinzugefügt oder nicht?
Hardik Hardiya
'git remote -v' gibt aus: origin git @ mygitlabhost: repositories / user / repo.git (abrufen) origin git @ mygitlabhost: repositories / user / repo.git (push)
Hroft
Wenn Sie gehostetes Gitlab verwenden, liegt das Problem wahrscheinlich auf ihrer Seite. Versuchen Sie es einfach ein paar Minuten später erneut.
Erik Aronesty
0

Ich habe dieses Problem gelöst, indem ich remote 'origin' urlvon httpzu gitProtokoll in gewechselt habe.git/config

zzxwill
quelle
0

Gehen Sie zu Projekteinstellungen -> Hooks -> (Unter) Hooks vor dem Empfang

Für die Deaktivierung von cp ist eine Problemreferenz in Commits erforderlich

Manoj
quelle
0

Ich bin mit BitBucket auf denselben Fehler gestoßen. Ich hatte ein lokales Git-Repo, das ich online sichern wollte, also habe ich ein neues Repository aus meinem BitBucket-Konto erstellt (über die Weboberfläche).

Nach dem Ausführen git remote add origin [email protected]:StatMarianne/<a private repo>.gitlief ich git push origin masterohne Erfolg (normalerweise verwende ich die Option -u nicht mit, git pushda es mir nichts ausmacht, beim Drücken und Ziehen die vollständigen Repo- und Filialnamen einzugeben).

Der Fehler lautete:

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 '[email protected]:StatMarianne/<a private repo>.git'

Aber meine lokale Niederlassung wurde erfolgreich gepusht, als ich lief git push -u origin master (genau nach den Anweisungen von BitBucket).

Ich finde es überraschend, da -u ( --set-upstream) sowieso nur "Upstream (Tracking) Referenz hinzufügen sollte ...".

mkcor
quelle
-1

Ich habe das gleiche Problem, weil ich meinen Code direkt in den Hauptzweig schiebe und keine Rechte dafür habe. Also schiebe ich meinen Code in einen neuen Zweig und danach habe ich eine Pull-Anfrage zum Zusammenführen mit dem Master erstellt.

Ferozpuri
quelle