Integration verschiedener Zweige aus externen Quellen in ein einziges Mercurial-Repository

8

Bearbeiten : Machen Sie dies noch deutlicher, wenn das Kopfgeld abläuft: Gibt es eine Möglichkeit, den Verlauf (aus verschiedenen SCMs) direkt mit Mercurial in einen bestimmten Zweig zu importieren?


Ich arbeite derzeit in einem Unternehmen mit Perforce und mache Platz für eine verteilte Versionskontrolle mit Mercurial. Ich hatte Erfolg beim Importieren der Perforce-Historie mit der Perfarce (ein ziemlich passender Name, ich lache jedes Mal, wenn ich ihn sehe / sage), dies funktioniert jedoch immer nur mit einem Zweig.

So funktioniert mein P4-Integrationssetup:

  • Erstellen Sie notgedrungen einen "Client", der eine Art Beschreibung dessen darstellt, was Sie ständig aktualisieren / auschecken werden. Dies kann jeweils nur einen Zweig (Amtsleitung oder andere) ansprechen.
  • Sobald Sie dies getan haben, laufen Sie hg clone p4://<server>/<client_name>
  • Gehen Sie zu .hg / hgrc und setzen Sie die Perforce-Pfadlinie: perforce = p4://<server>/<client_name>
  • Arbeiten Sie normal mit dem Code unter mercurial, führen Sie hg pull perforceeine Synchronisierung durch und hg pushexportieren Sie eine Änderungsliste

Ich möchte in der Lage sein, einen Perforce-Pfad pro Zweig zu haben und alles im selben Repository arbeiten zu lassen. Das Pushing ist jetzt jedoch kein Problem. Wenn ich den Verlauf aus einem anderen Zweig ziehe, landet er im Standardzweig.

Ich möchte in der Lage sein, so etwas zu tun hg pull perforce-R5und es in der R5-Filiale von mercurial landen zu lassen. Selbst wenn ich keine Zusammenführungshistorie habe, wäre es süß genug, um die Geschichte der Branche zu bewahren.

Es gibt auch andere Plugins für CVCSs, mit denen Sie Mercurial integrieren können, aber AFAIK, die Subversion, hat das gleiche Problem.

Ich glaube nicht, dass es einen direkten Weg gibt, dies zu tun, aber solange ich den Prozess mit einigen Hooks und Skripten in einer einzelnen Mercurial-Maschine automatisieren könnte, wäre das gut genug.


Edit : Um die Dinge etwas klarer zu machen:

  • Perforce Stamm wird auf Mercurial abgebildet Standardzweig
  • Der Perforce R1- Zweig sollte dem Release-1- Zweig von Mercurial zugeordnet werden (dasselbe gilt für R2, R3 usw.).
  • Wenn ich Mercurial anweise, von Perforce zu ziehen (dh hg pull perforce"perforce" ist der Name des Pfads, der auf den Perforce-Client verweist), sollte der Perforce-Trunk in die Standardeinstellung von Mercurial übernommen werden.
  • Wenn ich Mercurial anweise, von Perforce-R1 zu ziehen (dh hg pull perforce-R1"perforce-R1" ist der Pfad zum R1-Client), sollte der Perforce R1-Zweig zum "Release-1" -Zweig von Mercurial gezogen werden. Dies ist der Teil, nach dem ich frage .
dukeofgaming
quelle
Ich bin mir ziemlich sicher, dass ich dabei helfen kann (ein Quecksilber-Obsessiver zu sein und in der Vergangenheit von p4 auf hg migriert zu sein), aber es wäre großartig, wenn Sie ein Diagramm hinzufügen könnten, das den Workflow zeigt, den Sie verwenden möchten um die Dinge etwas klarer zu machen.
Ed James

Antworten:

0

Ich glaube nicht, dass dies direkt möglich ist.

Eine Möglichkeit besteht darin, das rebaseTool zu verwenden, um die entsprechenden Teile des Repositorys nach dem Abrufen mit den folgenden Schritten in den anderen Zweig zu verschieben:

  • Erstellen Sie den gewünschten Zweig, z hg branch release-1
  • Neuen Zweig festschreiben: hg commit -m "Created branch"
  • Ziehen Sie das Remote-Repository in den Standard-Quecksilberzweig: hg pull perforce-R1
  • Stellen Sie den neuen Pull auf den gewünschten Zweig zurück: hg rebase -s <first changeset of perforce-R1> -d release-1
Scroog1
quelle
Ich denke, seine Antwort reicht aus, aber ich suche nach einer Möglichkeit, dies automatischer zu tun.
Dukeofgaming