Crochet de pré-réception d'erreur de push Git refusé

168

J'ai exécuté le serveur gitlabhq rails sur une machine virtuelle, en suivant 1 à 6 étapes de ce tutoriel https://github.com/gitlabhq/gitlab-recipes/blob/master/install/centos/README.md et démarre la commande d'exécution du serveur rails sudo -u git -H bundle exec rails s -e production. Après cela, j'ai créé un utilisateur, à l'aide des outils d'administration et créé un nouveau projet sous cet utilisateur. Ensuite, j'essaye de pousser le projet existant vers ce dépôt comme toujours. Mais dans la dernière étape, git push origin masteréchoue avec l'erreur

[distant rejeté] maître -> maître (crochet de pré-réception refusé)

Information additionnelle:

1) Je n'ai pas activé l'utilisateur (propriétaire du projet) via le lien d'activation par e-mail, car je n'ai pas configuré le service de publication côté serveur et je n'ai pas trouvé d'instructions pour le faire dans ce manuel.

2) Le serveur Gitlab génère des conseils sur la façon de pousser le projet vers le dépôt et il n'y a pas repositories/de chemin. Je veux dire qu'il génère git@mygitlabhost:user/repo.gitau lieu de git@mygitlabhost:repositories/user/repo.gitqui est correct.

3) Lorsque j'ai essayé de le déboguer, j'ai ouvert pre-receivescript à l' intérieur repo sur le serveur et essayé de variables de sortie (il y a 3 d'entre eux): refs = ARGF.read, key_id = ENV['GL_ID']et repo_path = Dir.pwdet a trouvé que key_id est vide toujours. Peut-être que le problème est là ... Si oui, donnez-moi des suggestions sur la façon de le résoudre. Merci

Hroft
la source
15
Je jure, il y a au moins 1 personne dans chaque équipe de développement logiciel qui se réveille tous les jours et réfléchit à comment rendre la vie des autres développeurs beaucoup plus difficile.
samayo
Il semble qu'il existe une réponse très populaire qui doit fonctionner pour la plupart des gens. Dans mon cas, cependant, le même message a été reçu de Git Hub lorsqu'il y avait accidentellement un autre push déjà en cours depuis une autre machine lors d'une tentative de push.
Hack-R

Réponses:

230

GitLab par défaut marque la masterbranche comme protected(voir la partie Protecting your codedans https://about.gitlab.com/2014/11/26/keeping-your-code-protected/ why). Si c'est le cas dans votre cas, cela peut vous aider:

Ouvrez votre projet> Paramètres> Référentiel et allez dans "Branches protégées", trouvez la branche "maître" dans la liste et cliquez sur "Déprotéger" et réessayer.

via https://gitlab.com/gitlab-com/support-forum/issues/40

Pour la version 8.11 et plus, cliquez ici: https://docs.gitlab.com/ee/user/project/protected_branches.html#restricting-push-and-merge-access-to-certain-users

Max Vyaznikov
la source
8
L'interface utilisateur a un peu changé: après le projet "Paramètres", cliquez sur l'onglet "Référentiel". Puis "Protected Branches"
Donn Lee
J'avais donc le même problème qu'OP avait et cette solution a fonctionné pour moi, merci! Mais maintenant je me demande pourquoi? J'utilise gitlab depuis un moment et tout d'un coup je dois faire ça? Qu'est ce qui a changé?
Andrew Lamarra
2
Puisque GitLab 8.11les options ont un peu changé, vérifiez les détails ici
Arghya C
face au même problème. Ici, je ne suis même pas capable de pousser une autre branche. Je le pousse la première fois cependant.
Santosh Kadam
1
J'ai retiré sans protection mais que va-t-il se passer maintenant? quelqu'un d'autre dans le monde peut travailler sur ce repo?
Flutterer
14

Suite à un problème résolu sur ma machine locale:

A. Tout d'abord, assurez-vous que vous utilisez les informations de connexion correctes pour vous connecter à Bitbucket Server (c'est-à-dire un nom d'utilisateur / mot de passe / clé SSH qui vous appartient) 

B. Ensuite, assurez-vous que le nom / l'adresse e-mail est correctement défini dans votre configuration Git locale: définissez votre configuration Git locale pour le compte sous lequel vous essayez de pousser (la vérification affirme que vous êtes la personne qui a validé les fichiers) * Notez que cela est sensible à la casse, à la fois pour le nom et l'adresse e-mail * Il est également sensible à l'espace - certains comptes d'entreprise ont des espaces / caractères supplémentaires dans leur nom, par exemple. " Contractor/ space space(LDN)". Vous devez inclure le même nombre d'espaces dans votre configuration que sur Bitbucket Server. Vérifiez ceci dans le Bloc-notes si bloqué.

C. Si vous n'utilisiez pas le bon compte, changez simplement les informations d'identification de votre compte (nom d'utilisateur / mot de passe / clé SSH) et réessayez.

D. Sinon, si votre configuration locale est incorrecte, vous devrez la modifier

Pour Mac

open -a TextEdit.app ~/.gitconfig

REMARQUE: vous devrez corriger les anciens commits que vous tentiez de pousser.

  1. Modifiez votre dernier 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. Essayez de repousser vos commits:

    > git push
    
Maverick09
la source
12

Dans mon cas, mon équipe a créé un repo (le repo était vide) et m'a assigné en tant que développeur alors quand j'ai poussé le code directement pour maîtriser l'erreur à laquelle j'étais confronté ! [remote rejected] master -> master (pre-receive hook declined)Alors comment ça a été corrigé qu'il m'a assigné en tant que mainteneur alors je a pu transmettre le code directement au maître.

Saad Qamar
la source
10

Il semble que le problème soit lié à certains services, comme sidekiq. L'exécution sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=productiongénère tous les problèmes avec config.

Hroft
la source
2

Vous n'avez peut-être pas accès développeur au projet ou à la branche principale. Vous avez besoin d'un accès de développement pour pousser de nouveaux travaux.

Nouveau travail signifiant de nouvelles branches et de nouveaux engagements.

Vishav Premlall
la source
2

Ce n'est peut-être pas le cas, mais c'était la solution à mon erreur "Le hook de pré-réception refusé ":

Certains référentiels n'autorisent que les modifications via Pull Request . Cela signifie que vous devez

  1. Créez une nouvelle branche en prenant comme base la branche sur laquelle vous souhaitez appliquer vos modifications.
  2. Validez et transférez vos modifications dans la nouvelle branche.
  3. Ouvrez une Pull Request pour fusionner votre branche avec celle d'origine.
Rocío García Luque
la source
0

Vous devez ajouter votre clé ssh à votre compte git, si elle génère une erreur, supprimez la clé ssh précédente et créez une nouvelle clé ssh, puis ajoutez.

Hardik Hardiya
la source
Cela n'a pas aidé. :( Testé sur les deux comptes - racine et myuser sur vm et respectivement de la machine locale.
Hroft
check git remote -v, votre repo git est ajouté ou non?
Hardik Hardiya le
'git remote -v' sorties: origin git @ mygitlabhost: repositories / user / repo.git (fetch) origin git @ mygitlabhost: repositories / user / repo.git (push)
Hroft
Si vous utilisez gitlab hébergé, le problème est probablement de leur côté. Essayez à nouveau quelques minutes plus tard.
Erik Aronesty
0

J'ai résolu ce problème en passant remote 'origin' urldu protocole httpau gitprotocole dans.git/config

zzxwill
la source
0

Accédez aux paramètres du projet -> Hooks -> (Under) Pre-receive hooks

Désactiver cp nécessite une référence au problème dans les commits

Manoj
la source
0

Je suis tombé sur la même erreur en utilisant BitBucket. J'avais un référentiel Git local que je voulais sauvegarder en ligne, j'ai donc créé un nouveau référentiel à partir de mon compte BitBucket (en utilisant l'interface Web).

Après avoir couru git remote add origin [email protected]:StatMarianne/<a private repo>.git, j'ai couru git push origin masteren vain (je n'utilise généralement pas l' option -u avec git pushparce que cela ne me dérange pas de taper le repo complet et les noms de branche lors de la poussée et de l'extraction).

L'erreur a lu:

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'

Mais ma branche locale a été poussée avec succès lorsque j'ai couru git push -u origin master(en suivant strictement les instructions de BitBucket).

Je trouve cela surprenant, puisque -u ( --set-upstream) ne devrait "ajouter qu'une référence (de suivi) en amont ..." Quoi qu'il en soit.

mkcor
la source
-1

J'ai rencontré le même problème, c'est parce que je pousse mon code directement dans la branche principale et que je n'ai pas les droits pour cela. Je pousse donc mon code dans une nouvelle branche et après cela, j'ai créé une pull request pour fusionner avec master.

ferozpuri
la source