Wie kann ich ein großes Perforce-Repository in ein anderes Versionskontrollsystem exportieren, ohne den Verlauf zu verlieren?

8

Bei der Arbeit haben wir ein großes Perforce-Repository (ca. 40.000 Änderungslisten, Gesamtspeichergröße ~ 145 GB). Im Allgemeinen sind wir mit Perforce nur mit leichten Fehlern zufrieden, aber wir planen, zu einem verteilteren Entwicklungsmodell zu wechseln, und möchten daher auch zu einem verteilteren Versionskontrollsystem übergehen.

Bisher habe ich die üblichen Verdächtigen (git, mercurial und potentiell bazaar) angeschaut, aber unsere Haupthürde ist derzeit, die Versionsgeschichte aus Perforce zu holen und in die verschiedenen DVCS zu importieren Wir verlieren die Geschichte nicht. Wir würden es auch vorziehen, den Perforce-Server nicht herumhängen zu lassen, wenn wir ihn nicht unbedingt behalten müssen - meine Erfahrung mit dieser Art von Migration ist, dass niemand nach einer Weile auf den alten Repo schaut, so dass Sie den Verlauf verlieren würden auf diese Weise.

Da es mehrere Projekte im Repository gibt, besteht die Idee darin, sie in mehrere DVCS-Projekte aufzuteilen, wenn wir den Verlauf exportieren, da nicht jeder jeden Teil des Verlaufs sehen muss. Unser größtes Projekt enthält jedoch immer noch etwa 2/3 der festgeschriebenen Revisionen und nimmt ca. 2/3 des Speichers ein. Es hat auch die größte Anzahl von Niederlassungen - wahrscheinlich um 30.

Bisher habe ich Folgendes versucht: Alles läuft unter Windows, da wir nur ein Windows-Shop sind:

  • Import in Mercurial mit der Erweiterung hg convert . Dies scheint für den Hauptzweig des Projekts, das ich konvertiere, sehr gut zu funktionieren, aber der Versuch, die Perforce-Zweige in benannte Mercurial-Zweige zu konvertieren, scheint immer noch einen flachen Import mit jedem Check-in auf dem Standard-Zweig zu erzeugen. Vielleicht liegt das daran, dass ich die Zweigkarte falsch gesetzt habe, aber hg help convert legt nahe, dass Sie ein Perforce Repo nur mit diesem Importer in eine "flache" Struktur ohne Verzweigungen verwandeln können, was für unsere Verwendung nicht wirklich gut genug ist. li>
  • Mit git-p4.py in Git importieren. Perforce-Dokumente, die git als verteiltes Frontend für Perforce verwenden und basierend auf den neuesten Revisionen des Repos einen brauchbaren Git-Repo erstellen. Der Versuch, das gesamte Unterprojekt mit Zweigen zu importieren, bricht den Importer, da der Arbeitsspeicher knapp wird. Daher kann ich nicht einmal sagen, ob es gelingt, unseren Repo korrekt zu importieren.
  • Ich hatte dann diesen brillianten Hirnfurz, den Perforce-Repo in SVN zu importieren, wobei alle Zweige entsprechenden SVN-Zweigen zugeordnet sind, wie jedes Versionskontrollsystem unter der Sonne von SVN importieren kann. Dies würde nur SVN als Zwischenschritt bei der Konvertierung verwenden, nicht als das Ziel-VCS - wir würden sonst nichts von dieser Umwandlung gewinnen. Bei der Verwendung von p42svn.pl kam es ziemlich früh zu einem Fehler, da unser Perforce-Server anscheinend nicht von dem Skript gehackt wurde, das anscheinend für jede Datei / Revision eine neue Verbindung herstellt.
  • Ich habe noch nicht darüber nachgedacht, die Geschichte in Bazaar zu exportieren, denn es ist ein bisschen ein ran.

Meine Fragen sind also:

  • Gibt es neben p42svn.pl ein gutes Werkzeug, um ein Perforce Repo in SVN zu exportieren? Es macht mir nichts aus, SVN als Zwischen-Repo zu verwenden, da es den Export in alle DVCS, die wir uns anschauen, relativ einfach macht.
  • Hat jemand Zweigstellen von Perforce erfolgreich in Mercurial-Filialen exportiert, und wenn ja, wie haben Sie das gemacht? Die Dokumente auf der Convert-Erweiterung scheinen ein wenig spärlich zu sein und ich finde keinen guten / funktionierenden Weg, dies zu tun.
Timo Geusch 28.02.2012, 16:58
quelle

4 Antworten

5

Wie Sie wissen, ist das Wechseln von Quellcodeverwaltungssystemen eine große Aufgabe, die man nicht leicht nehmen sollte. Es gibt ein beträchtliches Risiko und Ausfallzeiten, da 1) Sie den eigentlichen Übergang und 2) dann wieder machen, wenn alle neu instrumentieren und mit dem neuen System auf den neuesten Stand gebracht werden.

Wenn Sie Ihre Optionen noch untersuchen, würde ich ernsthaft Luft holen und in P4 Sandbox schauen, ob das Ihren Anforderungen entspricht.

Weitere Informationen zu P4 Sandbox finden Sie weiter unten.

Überblick
- P4Sandbox Feature-Demo (Video)

Blogposts
- P4Sandbox Private lokale Verzweigung, verteilte Entwicklung und mehr
- P4Sandbox's First Submit
- Verteilte Entwicklung und P4Sandbox
- Private Branching mit P4Sandbox - Aufgabenorientierte Arbeit in P4Sandbox

Forum Diskussion
- Diskussionen zu neuen Funktionen in den offiziellen Foren

    
Dennis 29.02.2012 17:09
quelle
4

Mein Wort, Ihr Repository ist wirklich fast 200 Gigabyte groß? Es tut mir leid für den ersten Dummkopf, der eine git pull macht, um eine Kopie des Repositories zu bekommen, und entdeckt, dass sie jetzt 150 Gigabyte Daten herunterladen.

Mein Vorschlag: Kümmere dich nicht um die ganze Geschichte. Sie brauchen nur die aktiven Versionen und Zweige. Stellen Sie sich dies als eine Gelegenheit vor, Totholz wegzuwerfen und Ihr Depot neu zu strukturieren.

Ich habe mich immer dafür eingesetzt, so viel Geschichte wie möglich zu sammeln, aber eines Tages musste ich ein StarTeam-Repository in ClearCase konvertieren, was einfach nicht möglich war. Die Befehlszeilentools in StarTeam waren schlecht und die API konnte einfach nicht das tun, was ich brauche.

Wir haben einfach die Versionen heruntergeladen, die die Kunden hatten, die Niederlassungen, an denen wir arbeiteten, und einige Versionen der Quelle. Wir haben unseren alten StarTeam-Server für den Fall in Betrieb gehalten, dass jemand die Quelle sehen muss, aber niemand hat es getan.

Aber wenn du das durchmachen willst, sollte es wirklich nicht so schlimm sein. Sie könnten wahrscheinlich ein Python- oder Perl-Skript schreiben, um die Konvertierung für Sie durchzuführen.

Perforce verfolgt den Verlauf über nummerierte Changesets. Ja, jede Datei hat ihre eigene Versionsnummer, aber Sie sind wirklich nicht so interessiert, Sie interessieren sich mehr für die Änderungssets.

Wenn das letzte Änderungsset für P4 1.000 ist, können Sie die Änderungssets 1 bis 1.000 wiederholen. Perforce überspringt manchmal einen Changeset, aber das ist ziemlich einfach zu erkennen. Jedes Changeset hat ein Datum, den Namen der Person, die dieses Commit gemacht hat, und ihren Kommentar. Mit diesen Informationen übertragen Sie Ihre Änderungen an das Git-Repository und ändern das Datum, den Autor und den Kommentar dieses Commits.

Übrigens, da Sie nach Git ziehen, hoffe ich, dass Sie Ihr Repository in separate Repos aufteilen. Wenn Sie erstellte Objekte festgeschrieben haben, entfernen Sie sie aus dem Perforce-Repository, bevor Sie sie in Git verschieben. Sie sollten niemals ein gebautes Objekt im Repository speichern - insbesondere, wenn es sich um Binärdateien handelt. Sie nehmen viel Platz ein und veralten sehr schnell.

    
David W. 29.02.2012 21:30
quelle
1

Wir (ich arbeite notgedrungen) haben ein Produkt erstellt, das dem Perforce-Depot eine Git-Schnittstelle zur Verfügung stellt.

Ссылка

Ich habe das intern seit über einem Jahr genutzt, es ist großartig, da Sie den neuen DVCS-Ansatz (wie viele Repos Sie wollen) mit einem "Live" -Prforce-Backend ausprobieren können. Ich war das einzige Teammitglied, das Git benutzte, während alle anderen p4 oder p4v benutzten. Ergo, Leute könnten mit git arbeiten und nach und nach Ihre Migrationskonfiguration festlegen.

Es gibt Unterstützung für die Zuordnung von Verzweigungen zwischen den beiden Systemen: Ссылка

Ich bin nicht sicher, ob das alle oben genannten Systeme löst, da ich sicher bin, dass Sie nur von git zu X gehen können.

    
Tristan Juricek 25.11.2013 19:59
quelle
-1

Ich würde sagen, dass das Wegwerfen von Geschichte ein Blockierungsproblem darstellt. Wenn Sie Software-History pflegen, ist unschätzbar und außerdem ist der ganze Punkt der Versionskontrolle, Geschichte wirklich zu behalten. Was ist der Sinn selbst wenn du einen SCM verwendest, wenn dir die Geschichte egal ist? Das ist einer der, wenn nicht der Punkt von scm. Davon abgesehen, haben wir genau das gemacht, Geschichte vergeudet, eine Kopie des Codes erstellt und ihn in den Code gesteckt. Trivial trivial, aber Sie verlieren Geschichte

    
Alexc 22.04.2013 21:01
quelle

Tags und Links