2012-01-07 9 views
6

Se si utilizzare per forza a distanza e il desiderio di avere la velocità impressionante di git per il monitoraggio diff, ecco la soluzione: http://kb.perforce.com/article/1417/git-p4git-p4 - eventuali grandi spiegazioni per come funziona

Tuttavia, ho notato che il seguente:

  1. Seguire le istruzioni esattamente
  2. Si può prendere un po 'per importare un grande albero senza ottenere storia
  3. su un grande albero, il primo commit richiederà molto tempo come questo comando sincronizzerà la albero intero.
  4. Se si esegue un commit che non si desidera inviare in modo forzato, è necessario eseguire un "git rebase -i" e rimuovere il record di commit incriminato. Non puoi fare un "git p4 submit" e quindi "p4 ripristinare" il file che non vuoi inviare.
  5. Se si incasina qualcosa, le cose possono diventare davvero confuse.

E questa è la mia domanda. C'è una buona spiegazione di come git-p4 usi i repository remoti? E una spiegazione generale di hot git-p4 funziona?

git-p4 non è per i deboli di cuore. Sto imparando che hai davvero bisogno di capire bene per usarlo bene.

+3

Direi che vuoi capire bene Git per usarlo bene, a prescindere dal fatto che tu stia interagendo con perforce dall'altra parte. – Cascabel

risposta

8

Vi sono altre informazioni nello Documentation/git-p4.txt nel codice sorgente del progetto git.

git-p4 gestisce un ramo refs/remotes/p4 per il mirror del server Perforce remoto. Per impostazione predefinita, git-p4 clone e git-p4 sync aggiornare questo telecomando e rebase il master su di esso.

git-p4 submit richiede la configurazione di una directory locale aggiuntiva come root del client Perforce per l'utilizzo da p4 submit.

git-p4 sync/clone registrerà ciascun numero di lista modifiche Perforce nel messaggio di commit git corrispondente. Per esempio:

[git-p4: depot-paths = "//depot/test/": change = 51]

Usando queste notazioni elenco modifiche git-p4 sync acquisisce changelists sul server Perforce non ancora impegnati a git, aggiungendo annotazioni dell'elenco modifiche ad ogni nuovo git commit messaggio.

git-p4 submit inizia identificando nuovi commit locali di git - quelli senza [git-p4: ...]. Utilizzando lo spazio di lavoro locale del client Perforce, sincronizza i file Perforce e con git apply applica le patch ottenute da git format-patch ai commit di git non inviati prima di chiamare p4 submit.

Poi git-p4 submit chiamate git-p4 sync per aggiornare il ramo ref/telecomandi/p4 contro telecomando Perforce appena aggiornato.

Infine git-p4 submit chiamerà git rebase sul ramo master rispetto al telecomando aggiornato. Ciò si traduce nello stesso albero di git che è stato inviato, ma con messaggi di commit modificati contenenti le notazioni degli elenchi di modifiche [git-p4...].

Come si possono mantenere alcuni file modificati in git senza mai inviarli a p4?

git-p4 submit invia tutti i commit di filiale. Utilizzare i soliti strumenti git per organizzare le modifiche all'interno e all'esterno del ramo che si sceglie di inviare a Perforce.

+0

Grazie. C'è una risposta a "Quali commit sono in sospeso per impegnarsi a forza?" Qualche altro "trucco" con l'utilizzo di questo strumento? – justingordon

1

Io uso git-p4 occasionalmente, mentre viaggio spesso e non ho sempre una buona connessione con l'ufficio. La mia comprensione, anche se non mi sono immerso profondamente, è che git-p4 mantiene uno spazio di lavoro Perforce per te. Ogni volta che esegui un git p4bbb, stai praticamente sincronizzando il codice nel tuo spazio di lavoro, che git-p4 poi riproduce come nuovo commit nel tuo repository git. Ogni volta che esegui un git p4 invia, ripete una serie di patch nell'area di lavoro di Perforce e le invia utilizzando gli elenchi di modifiche di Perforce.

Immagino che si possa pensare a un server Perforce come a un ramo remoto, ma realisticamente si tratta di un'implementazione molto limitata.

Se hai domande più dettagliate, proverei a postare nei forum Perforce. Ci sono un paio di persone in ufficio che hanno studiato git-p4 in dettaglio e potrebbero essere in grado di aiutare.

+0

In che modo git-p4 sa cosa è in sospeso da inviare a p4? Come si modifica l'elenco di ciò che verrà inviato? Come si possono mantenere alcuni file modificati in git senza mai inviarli a p4? – justingordon

+0

Penso che la nuova risposta abbia più dettagli tecnici, ma l'elenco di ciò che è in sospeso da inviare è essenzialmente il commit di git su _master_ dall'ultima volta che hai lanciato _git p4 submit_. È possibile modificare ciò che viene inviato a Perforce lavorando nei rami git e rebasando su _master_ solo ciò che si desidera inviare a Perforce. È possibile mantenere i file modificati su altri rami di git senza inviarli a Perforce. –

2

In merito a "Quali commit sono in sospeso per l'esecuzione forzata?"

Qualsiasi comando che può accettare un intervallo di revisione (vedere gitrevisions(7)) dovrebbe funzionare, è sufficiente fare riferimento al remoto p4 come endpoint per l'intervallo. Per esempio:

  • git log remotes/p4/master..master
  • git diff remotes/p4/master..master

Io tendo ad usare show-branch per ottenere una rapida panoramica dello stato dei miei rami, nel qual caso git show-branch --all funziona pure.

-1

Forse troverete questo strumento alternativo interessante: http://lm1.github.io/git-p4s

Questo è un fork del programma di utilità originale git-p4 con il supporto per flussi Perforce però solo la sincronizzazione unidirezionale funziona a questo punto.

Problemi correlati