Pushing Änderungen an Gerrit erfordert den eher esoterischen Befehl„git push“ zu Gerrit mit einem Tracking-Zweig
git push origin HEAD:refs/for/branchname
Wir haben das Drehbuch, aber ich bin auf der Suche nach einer Möglichkeit, diese nativ zu tun. Mit der mächtigen Konfiguration von git sieht es so aus, als könnte ich das meiste davon vorkonfigurieren [1], so dass nur git push
... fast ausreicht. Ich bin auf der remote.<name>.push
refspec fest.
Ich kann bereits eine Tracking Thema Zweig erstellen, so dass git pull
(keine anderen Parameter) Änderungen von Upstream-Remote in meinem Zweig Zweig ziehen. Jedoch mit Gerrit, dem Push-und holt refspecs ist nicht die gleiche: eine Fetches (Merges) von refs/heads/trackbranch
, aber man drückt auf refs/for/trackbranch
[2]
ich push
Refspec in remote.<name>.push
konfigurieren können, aber die Syntax ist ziemlich einfach : Wenn ich setze push = refs/heads/*:refs/for/*
Dann wird versuchen, meine t-foo
Zweig zu refs/for/t-foo
schieben. Aber git hat die Information, dass t-foo
trackbranch
verfolgt. Kann ich eine refspec so definieren, dass git automatisch versucht t-foo
auf refs/for/trackbranch
zu schieben?
Wir verwenden derzeit ein Skript, um dies zu tun, und ich könnte ein Push refspec für jeden Zweig Zweig definieren (möglicherweise durch mehr Skripting). Ich hoffe, es gibt eine native Art, dies zu tun, so dass wir uns nicht auf mehr benutzerdefinierte Inhouse-Skripte für unser Team verlassen müssen.
[1] durch einen Tracking-Zweig mit git checkout origin/upstream_branch -b topic_branch
definieren oder innerhalb einer bestehenden Niederlassung git branch --set-upstream-to origin/upstream_branch
[2] refs/for/*
drängen schafft eine changeset für die Überprüfung. Mit entsprechenden Berechtigungen könnte man auf refs/heads/*
drücken, um die Überprüfung zu umgehen, aber das negiert den meisten Punkt von Gerrit.
"Kann ich einen refspec so definieren, dass git automatisch versucht, ein beliebiges t-foo auf seinen refs/for/trackbranch zu schieben?" Nein, zumindest denke ich das heute nicht. Was Sie erreichen wollen, ist die 'fetch = ...' Mapping-Maschine, die git mit Merge-Namen verwendet (um 'remote =' und 'merge =' parts) zuzuordnen, und das scheint nirgendwo verfügbar zu sein. Sie könnten ein Programm schreiben, das Ihre lokalen Zweige durchkämmt und all dies berechnet (aktualisiert dann Ihre gitconfig). Immer noch ein bisschen schmerzhaft. – torek
Ja, das möchte ich machen. Wenn dies bestätigt wird, warum nicht als Antwort? –
Nach mehr Suche, meine Frage ist ähnlich zu http://stackoverflow.com/questions/7101145/how-to-configure-specific-upstream-push-refspec-for-git-when-used-with-gerrit von zwei Jahren her und http://stackoverflow.com/questions/14320363/push-current-branch-to-gerrit vom letzten Jahr –