2013-12-16 18 views
8

Nach this answer und my own question habe ich eine einfache (hoffe ja) Frage.Warum kann Gerrit keine Verzweigung selbst erstellen?

Wenn ich einen bestimmten Zweig, mit allen erforderlichen Refs richtig eingestellt drücken:

git checkout 82-blah-blah 
git push origin HEAD:refs/for/82-blah-blah 

Warum bekomme ich immer:

! [remote rejected] HEAD -> refs/for/82-blah-blah (branch 82-blah-blah not found) 

und ich muss immer an Gerrit UI gehen und diesen Zweig manuell erstellen?

Ist das nicht ein offensichtlicher Schritt, den Gerrit einfach automatisieren könnte? Oder fehlt mir etwas?

+0

als Workaround zuerst einen direkten Push machen, um den Zweig selbst zu erstellen – HiB

+0

Wenn ich das mache, wird Zweig erstellt, aber die Änderung selbst (in Gerrit) ** wird nicht ** und ich werde mit verloren gehen ein Durcheinander, nicht in der Lage, diese Situation zu beheben. Sehen Sie diese zwei meine Fragen: [ein] (http://stackoverflow.com/q/20542903/1469208) und [zwei] (http://stackoverflow.com/q/20606552/1469208). – trejder

+1

zuerst den lokalen Zweig ohne irgendwelche neuen Änderungen erstellen - 'git checkout -b Ursprung/Master' dann die Fernbedienung: 'git push Ursprung ' oder über die Gerrit UI – HiB

Antwort

1

Dieses Feature was implemented vor kurzem und wird in Gerrit v2.9 verfügbar sein.

+1

OMG! Bis Version '2.9' mit so grundlegenden, grundlegenden Funktionen nicht implementiert! :] – trejder

+3

AFAICT den neuen Zweigerzeugungs REST und SSH-Befehle, die 2.9 nicht das ursprüngliche Problem lösen in Gerrit verfügbar sein werden.Es gibt nur zwei neue Möglichkeiten, Verzweigungen manuell zu erstellen, aber seit dem ersten Tag war die Erstellung von Zweigen über 'git push' möglich. Ich vermute die Meinung von @trejder, dass dies ein "grundlegendes, grundlegendes Merkmal" ist, das auf einem Missverständnis beruht, dass die Erstellung von Zweigen eine häufige Aufgabe ist, die mehr oder weniger immer ausgeführt wird, wenn es sich um eine seltene Operation handelt. Das darf ich tun. –

+0

@ MagnusBäck: Sie liegen falsch. Neues feauture erstellt einen Zielzweig *, nachdem * dieses Commit die Prüfung bestanden hat. Das heißt, OP möchte – mvp

17

Die akzeptierte Antwort bezieht sich auf eine Funktion, mit der Benutzer Verzweigungen mithilfe von SSH erstellen können. Alles, was hinzugefügt wird, ist CreateBranchCommand. Das Original issue request könnte sich eigentlich auf das beziehen, was @trejder will, aber die Implementierung ist nur ein Erstellungszweig durch einen SSH-Befehl.

Ich hatte den Eindruck, dass, wenn Sie das Recht create-reference haben, Sie auf ref/for/new-branch drücken können, aber ich lag falsch, habe es nur getestet und es funktioniert nicht. Sie können nur neue Zweige erstellen, aber direkt auf sie drücken.

Erraten Sie die schnellste Weg, es zu tun bekommen wird:

git checkout master 
git push origin HEAD:new-branch 
git checkout new-branch 
git push origin HEAD:/refs/for/new-branch 
+1

Meine Antwort ist nicht falsch, neue Gerrit-Funktion ist genau das, was OP fragt. Lies [dies sorgfältig] (http://code.google.com/p/gerrit/issues/detail?id=1156): Was ich wirklich mit Gerrit machen kann, ist: 'git push origin head: refs/for/new-new-branch "und der neue Zweig wird erstellt, sobald der Push-Code die Überprüfung bestanden hat. – mvp

+2

Ich muss mit mvp übereinstimmen. Ich frage eigentlich, warum muss ich UI verwenden, um dasselbe zu tun, was Gerrit automatisieren kann? Angenommen, ich benutze 'Strg + C',' Strg + V', um _exactly den gleichen Verzweigungsnamen_ in Git Bash und Gerrits UI zu verwenden, habe ich genau die gleiche Möglichkeit, den Zweignamen falsch zu schreiben oder zu vielen von ihnen zu erstellen, wie ich es getan hätte, wenn Gerrit diesen Prozess für mich automatisieren würde. – trejder

+3

Ich denke, es ist klar, was Trejder will, und ich stimme @mvp zu, dass die ursprüngliche Feature-Anfrage in [Ausgabe 1156] (https://code.google.com/p/gerrit/issues/detail?id=1156) mit was übereinstimmen würde wird gefragt, aber es gibt keine Hinweise darauf, dass die Fehlerbehebung für das Problem wie ursprünglich gewünscht implementiert wurde. Wie in einem anderen Kommentar angegeben, implementiert [Change 52500] (https://gerrit-review.googlesource.com/52500) nur den im letzten Absatz des Problems beschriebenen Backup-Plan. –

0

Lassen Sie sagen, Niederlassung ist "myNewBranch"

git checkout master 
git push origin HEAD:myNewBranch 

Nachdem einige Änderungen verpflichten, die neuen schieben begehen:

git push origin myNewBranch 

Funktioniert für mich. Aber ..

Ich weiß nicht, warum kann nicht die gleiche Commit zu Master danach und umgekehrt - wenn ich PR für die Überprüfung in Master geöffnet haben, kann nicht das gleiche Commit auf die "myNewBranch" schieben. Um es zu machen, die PR aufgeben musste zu beherrschen und dann herauspicken die auf die neue lokale Niederlassung verpflichten und drücken Sie dann auf der Fernbedienung „myNewBranch“

Viel Glück!