Ottenere tutta la storia dei file con git-p4
Domanda
Come ho già detto in un domanda precedente , io sono esaminando la migrazione del nostro controllo del codice sorgente da Perforce a git.
Guardandosi intorno, ho trovato git-p4 (bisogna scavare un po 'di più, dal momento che non è nemmeno al repository puntato dal link. l'attuale lo script git-p4 più difficile da trovare).
Sono ora in esecuzione di questo script, e importa la versione corrente dei file in un nuovo repository git, ma non riesco a ottenere la storia, non importa quello che faccio.
Ecco la riga di comando corrente che uso è:
P4CLIENT=my-p4-clientspec git-p4 clone --max-changes=1000 --use-client-spec //p4/path/to/be/imported/...
Quindi, la vera domanda è:. Se qualcuno è riuscito a importare un deposito P4, compresa la storia , mi piacerebbe sapere come hai fatto
Soluzione
Prova aggiungendo "@all" per il percorso del file. Ad esempio, questo produce un pronti contro termine single-revisione per me:
python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \
//depot/services/master-pom/trunk/...
Questo comando ha importato l'intero:
python /usr/share/doc/git-core/contrib/fast-import/git-p4 clone --destination=master-pom \
//depot/services/master-pom/trunk/...@all
Ho provato ad utilizzare l'esempio git-p4 ma ha rinunciato per diversi motivi e scritto la mia pompa di fast-import. E 'stato un po' indietro, in modo da alcuni dei problemi potrebbe essere stata fissata ora: ma git-p4 avuto problemi con grandi changelists (come ad esempio la creazione iniziale di un ramo) (anche se usando la specifica cliente può aver contribuito, non lo faccio che ho provato) e file con il "+ S" modificatore di filetype (che è male e il male, ma abbiamo usato per usarlo). E il mio Python-fu non è stato fino ad avermi permesso di risolvere i problemi che ho avuto.
EDIT:. Dal momento che qualcuno ha chiesto per questo, qui è
https://github.com/araqnid/p4utils ha diverse cose P4, di cui P4- git-xfer è il P4-> git (a senso unico) replicatore. Ha alcuni problemi abbastanza però, a causa di essere principalmente un pratico-strumento personale, piuttosto che un vero e proprio pezzo di infrastrutture.
Per iniziare:
p4-git-xfer clone -d $PWD/dictionary.git -n //depot/services/midoffice/dictionary/... \
trunk 'release/*' 'branch/*' \
trunk=master release/*=r* branch/*=dev/*
si clonare quel percorso per forza ad una "dictionary.git" nudo. I primi argomenti che seguono il percorso di base sono "specifiche sportelli" che raccontano il replicatore dove trovare rami sotto la base. Quelle successive (con simboli '=') sono "caratteristiche specchio" che raccontano il replicatore come creare filiali locali da quelli importati. Le specifiche ramo causa "refs / remotes / p4 / tronco", "refs / remotes / p4 / rilascio / 1,0", ecc da creare. La forza specchio spec "refs / teste / master" a specchio "refs / telecomandi / p4 / trunk", "refs / teste / r1.0" a specchio "refs / telecomandi / p4 / release / 1.0", ecc E 'stato destinato come un modo per permettere a me di selezionare solo i rami particolari da quelli che sono stati replicati per essere propagate ai cloni.
Si tenterà di rilevare come si crea un ramo, ma questo è un po 'di una supposizione comunque con Perforce. A parte questo, non cerca di fare qualsiasi monitoraggio filiale a tutti:. Anche le unioni con tutto il ramo non verranno scritte come tale, mi dispiace
Dopo il clone iniziale, correndo p4-git-xfer fetch
dall'interno della replica git farà un aggiornamento incrementale. L'elenco modifiche alta acqua-mark è preso dal marks/p4
all'interno della repository git. Questo è un marcatori di file che carica rapida di importazione, quindi se si esegue una gioco di gambe di fantasia come l'utilizzo del filtro-ramo di riscrivere le cose, fate attenzione potrebbe essere necessario aggiornare anche questo.
Non è bella, e ha alcuni problemi medio-gravi; Io lo uso soprattutto per mia comodità, di isolarmi da problemi Perforce, non come una componente infrastrutturale critico giorno per giorno. E 'a senso unico: io in genere utilizzare lo script p4-am per applicare le patch create da git format-patch
. Che si funziona solo per lo più, con il generale cattiveria analisi, problemi di end-of-file di nuove righe, modifiche binari ecc.
Altri suggerimenti
Sto anche cercando di capire git-p4. Non molta documentazione là fuori, purtroppo. Mi piacerebbe entrare in contatto con voi come si può probabilmente aiutare a vicenda.
- installare git bash (CLI)
- installare p4 cli
- installare python 2.7
- ottenere lo script git-p4 >> http: / /git.kernel.org/cgit/git/git.git/plain/git-p4.py
- mettere questo script in c / programma / file / git / bin /
- ora aperto bash git o assegno cmd digitando python fatto, p4 fatto, git fatto, git p4,
- creare client area di lavoro di nome git.
- git clone p4 depo / percorso / @ tutti repo / path
nel caso in cui non funziona percorso impostato in variabili d'ambiente per Python se pitone crea problema set P4CLIENT = git
La guida in git-p4 è in realtà piuttosto bene:
man git-p4
Su Ubuntu 12.04 Si tratta di includere nel pacchetto git-man
.