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:
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>
Meine Fragen sind also:
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
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.
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.
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