2009-04-24 6 views
12

Wie ich in einer previous question erwähnt habe, bin ich dabei, unsere Quellcodeverwaltung von Perforce auf git zu migrieren.
Umsehen, ich habe gefunden git-p4 (Sie müssen ein bisschen mehr graben, da es nicht einmal bei dem Repository durch den Link zeigt. Die tatsächliche git-p4 script schwerer zu finden).Den gesamten Dateiverlauf mit git-p4 abrufen

Ich führe jetzt dieses Skript, und es importiert die aktuelle Version der Dateien in einem neuen Git-Repository, aber ich kann es nicht schaffen, die Geschichte zu bekommen, egal was ich mache.

Hier ist die aktuelle Befehlszeile ich benutze, ist:

P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...

also die eigentliche Frage ist: wenn jemand es geschafft hat, ein P4-Depot zu importieren, einschließlich der Geschichte, würde ich gerne wissen, wie du hast es geschafft.

Danke!

joce.

Antwort

19

Versuchen Sie, "@all" an den Dateipfad anzuhängen. Zum Beispiel ergibt sich ein Repo-Single-Revision für mich:

python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \ 
    //depot/services/master-pom/trunk/... 

Dieser Befehl die vollständige Geschichte importiert:

python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \ 
    //depot/services/master-pom/trunk/[email protected] 

ich das Beispiel git-p4 versucht, mit gab aber aus mehreren Gründen auf und schrieb meine eigene Fast-Import-Pumpe. Es ist eine Weile her, dass einige der Probleme jetzt behoben wurden: aber git-p4 hatte Probleme mit großen Änderungslisten (wie die erste Erstellung einer Verzweigung) (obwohl die Verwendung der Client-Spezifikation geholfen haben könnte, tue ich nicht denke, ich habe es versucht) und Dateien mit dem "+ S" Dateityp-Modifikator (das ist Bad And Evil, aber wir haben es verwendet). Und mein Python-Fu war nicht dazu in der Lage, die Probleme, die ich hatte, zu beheben.

EDIT: seit jemand danach gefragt hat, hier ist es.

https://github.com/araqnid/p4utils hat einige p4 Dinge, von denen p4-git-xfer der p4-> git (Einweg-) Replikator ist. Es hat jedoch einige Probleme, da es sich hauptsächlich um ein persönliches Handy-Tool und nicht um eine echte Infrastruktur handelt.

Erste Schritte:

p4-git-xfer clone -d $PWD/dictionary.git -n //depot/services/midoffice/dictionary/... \ 
    trunk 'release/*' 'branch/*' \ 
    trunk=master release/*=r* branch/*=dev/* 

wird, dass notgedrungen Weg zu einem bloßen "dictionary.git" klonen. Die ersten Argumente nach dem Basispfad sind "Verzweigungsspezifikationen", die dem Replikator mitteilen, wo sich Zweige unter der Basis befinden. Die späteren (mit '=' Symbolen) sind "Spiegelspezifikationen", die dem Replikator mitteilen, wie lokale Zweige aus den importierten erzeugt werden. Die Zweigspezifikationen bewirken, dass "refs/remotes/p4/trunk", "refs/remotes/p4/release/1.0" usw. erstellt werden. Die Mirror Specs zwingen "refs/heads/master" zu spiegeln "refs/remotes/p4/trunk", "refs/heads/r1.0" spiegeln "refs/remotes/p4/release/1.0" usw. Es war beabsichtigt als eine Möglichkeit, um nur bestimmte Zweige von denen auszuwählen, die repliziert wurden, um an Klone weitergegeben zu werden.

Es wird versuchen, zu erkennen, wie eine Verzweigung erstellt wird, aber das ist bei Perforce sowieso ein wenig raten. Außerdem versucht es überhaupt kein Filial-Tracking, auch ganze Branches werden nicht als solche ausgegeben, sorry.

Nach dem ersten Klon führt das Ausführen von aus dem Git-Replikat eine inkrementelle Aktualisierung durch. Die High-Water-Mark-Änderungsliste wird innerhalb des Git Repo von marks/p4 übernommen. Dies ist eine Markendatei, die schnell importiert werden kann. Wenn Sie also eine ausgeklügelte Fußarbeit machen, wie zum Beispiel die Verwendung von Filter-Branch, um Dinge neu zu schreiben, müssen Sie dies möglicherweise auch aktualisieren.

Es ist nicht schön, und hat einige mittelschwere bis ernsthafte Probleme; Ich benutze es hauptsächlich zu meiner eigenen Bequemlichkeit, um mich von Perforce-Problemen zu isolieren, nicht als alltägliche Komponente kritischer Infrastrukturen. Es ist unidirektional: Ich verwende das p4-am-Skript im Allgemeinen, um Patches anzuwenden, die von git format-patch erstellt wurden. Das selbst funktioniert nur meist mit allgemeiner Parsing Bösartigkeit, Problemen mit dem End-of-Datei Zeilenumbrüchen, binären Veränderungen usw.

+0

Ist Ihr p4-Import-Skript öffentlich? Wenn ja, hätten Sie etwas dagegen, es zu teilen? – joce

0

Ich versuche auch herauszufinden, git-p4. Nicht viel Dokumentation da draußen, leider. Ich möchte mich mit dir in Verbindung setzen, da wir uns gegenseitig helfen können.

+0

schafft Carl. Sie können mich bei jocelynlegault mit gmail.com erreichen. – joce

-1

Die git-p4 Hilfe ist eigentlich ziemlich gut:

man git-p4 

auf Ubuntu 12.04 ist in das Paket git-man aufnehmen.

0
  1. git bash installieren (cli)
  2. installieren p4 cli
  3. Python installieren 2.7
  4. get git-p4 Skript >>http://git.kernel.org/cgit/git/git.git/plain/git-p4.py
  5. dieses Skript setzen in c/Programm/files/git/bin/
  6. jetzt git bash oder cmd überprüfen, indem Sie python done eingeben, p4 done, git done, git p4,
  7. erstellen Client-Arbeitsbereich namens git.
  8. git p4 Klon Depo/path/@all Repo/path

für alle Fälle funktioniert nicht in Umgebungsvariablen für Python set path, wenn Python dort Hey Problem Satz P4CLIENT = git

Verwandte Themen