web-dev-qa-db-fra.com

Pourquoi git Push gerrit HEAD: refs / for / master est-il utilisé à la place du maître git Push Origin?

Je viens de commencer à utiliser gerrit et je veux savoir pourquoi nous devons faire git Push gerrit HEAD:refs/for/master au lieu de git Push Origin master

Si je fais git Push Origin master j'obtiens l'erreur disant ! [remote rejected] master -> master (prohibited by Gerrit)

137
Shrayas

La documentation de Gerrit, en particulier la section "Modifications poussées" , explique que vous transmettez à "magical refs/for/'branch' ref à l'aide de n'importe quel outil client Git".

L'image suivante est tirée de Intro to Gerrit . Lorsque vous appuyez sur Gerrit, vous faites git Push gerrit HEAD:refs/for/<BRANCH>. Cela reporte vos modifications dans la zone d'activation (dans le diagramme, "Modifications en attente"). Gerrit n'a pas réellement de branche appelée <BRANCH>; il ment au client git.

En interne, Gerrit a sa propre implémentation pour les piles Git et SSH. Cela lui permet de fournir le "magique" refs/for/<BRANCH> refs.

Lorsqu'une demande Push est reçue pour créer une référence dans l'un de ces espaces de noms, Gerrit applique sa propre logique pour mettre à jour la base de données, puis ment au client sur le résultat de l'opération. Un résultat réussi fait croire au client que Gerrit a créé l’arbitre, mais qu’en réalité, Gerrit n’a pas créé l’arbitre. [ Link - Gerrit, "Gritty Details" ].

The Gerrit workflow

Après un correctif correct (c’est-à-dire que le correctif a été transmis à Gerrit, [placé dans la zone de transfert "Modifications en attente"], examiné et que la révision est terminée), Gerrit insère le changement de "Modifications en attente" dans le " Authoritative Repository ", qui calcule la branche dans laquelle le pousser. En fonction de la magie qu’il faisait lorsque vous avez poussé vers refs/for/<BRANCH>. De cette façon, les correctifs révisés avec succès peuvent être extraits directement des branches appropriées du Authoritative Repository.

245
simont

Pour éviter de spécifier complètement la commande git Push, vous pouvez également modifier votre fichier de configuration git:

[remote "gerrit"]
    url = https://your.gerrit.repo:44444/repo
    fetch = +refs/heads/master:refs/remotes/Origin/master
    Push = refs/heads/master:refs/for/master

Maintenant, vous pouvez simplement:

git fetch gerrit
git Push gerrit

C'est selon Gerrit

56
Sean Murphy