Unser Ziel ist es, interne Entwicklungen basierend auf einem Projekt auf einem externen Repo (Github) mit Git und Gerrit durchzuführen. Wir würden regelmäßig aus dem externen Repo ziehen, um neue Änderungen und Verzweigungen einzubringen, und Gerrit verwenden, um den Überprüfungsprozess zu verwalten (und Jenkins, um alles zu erstellen).
Unser erster Prozess besteht darin, aus dem externen Repo über git einen lokalen Repo zu klonen, dann ein leeres Projekt in gerrit zu erstellen und schließlich den lokalen Klon auf gerrit zu schieben.
Zu diesem Zeitpunkt sehen wir jedoch keine Verzweigungen im Gerrit Repo! Im Moment arbeiten wir daran, indem wir manuell die verzweigten und die refids hinzufügen, aber das scheint verschlungen und zerbrechlich zu sein. Ich würde denken, dass die externen Zweige standardmäßig ohne zusätzliche Verrenkungen kommen würden. Sie sind sicherlich in dem Klon aus dem Github Repo gemacht.
Idealerweise wäre es schön, in der Lage zu sein, direkt von Github zu Gerrit zu klonen und es einfach funktionieren zu lassen ... es ist nicht klar, warum das zusätzliche lokale Repo einfach notwendig ist, um Dinge zu übertragen, oder warum Zweige nicht erscheinen im Gerrit-Klon, wenn der lokale Klon dorthin geschoben wird. Vorschläge?
Wenn Sie einen Git-Push ausführen, wird nur der aktive Zweig (HEAD) verschoben. Wenn Sie alle Zweige und Tags verschieben möchten, machen Sie etwas wie git push origin refs/heads/* --tags
Es ist technisch nicht notwendig, eine lokale Kopie des Repositorys zu haben, bevor wir nach Gerrit drängen, aber es ist wahrscheinlich die einfachste Methode.
Ich glaube, ich habe die Antwort für mich selbst gefunden. Es läuft darauf hinaus, wie Sie das Repository erstellen (und ist meine formelle Einführung in bare Repos).
Kurz gesagt, Sie können einen Repo wie üblich kopieren:
%Vor%Dies ergibt einen lokalen Klon mit dem Arbeitsverzeichnis myrepo , innerhalb dessen der Verzeichnisbaum myrepo / .git liegt.
Oder Sie können es nackt klonen. Es gibt mehrere Möglichkeiten, dies zu tun , aber die Option --smirror scheint das vollständigste Replikat zu liefern:
Dies erzeugt das myrepo.git -Verzeichnis (wie man es in gerrit oder in Gitolit finden kann), das die gleiche Struktur wie das Verzeichnis myrepo / .git hat, aber ohne die Arbeitsverzeichnis-Bits.
Hinweis: Ich füge hinzu, dass ich mir jetzt nicht sicher bin, ob ein Spiegel einem entfernten Klon mit entfernten Referenzen für die Zweige vorzuziehen ist ... Ich habe ein anderer Thread geht , der darüber befragt. Der Vollständigkeit halber ist hier eine Möglichkeit, einen blanken Klon mit Remote-Referenzen zu erstellen (der Schlüssel ist kein Arbeitsverzeichnis):
%Vor%Ich habe die Mirror-Idee einmalig getestet, indem ich ein Repo direkt in den lokalen Gerrit-Installationsordner geklickt habe, wo All-Projects.git auch lebt, gerrit neu gestartet hat und das Repo ebenso sieht alle seine Zweige. Es ist jedoch nicht der ideale Weg für Gerrit. Sie sollten stattdessen von einem lokalen Klon (vorzugsweise einem bloßen) klonen.
Also in Gerrit, erstellen Sie ein neues leeres Projekt über die Web-Admin-Schnittstelle (ich habe nicht eine erste leere Commit in es - nicht sicher, ob das würde Probleme verursachen), dann von innerhalb eines lokalen Spiegel des Repo Sie ' Versuchen Sie zu replizieren, schieben Sie es zusammen mit den Zweigen und Tags in das neue, leere Gerrit Repo:
%Vor%