2009-07-29 7 views
11

Se si fa un sync in modo forzato, può accadere, molto spesso, di non fare nulla anche se dovesse. Se esegui una sincronizzazione forzata (sync -f) sincronizzerà definitivamente tutti i file dal server in modo cieco e questo è inaccettabile se hai un grande progetto.Come eseguire una sincronizzazione veloce e sicura?

La domanda è come si può eseguire una sincronizzazione veloce?

risposta

18

La parte fondamentale della tua domanda è "anche se dovrebbe". Senza dubbio, in tutti i miei (anche molti) anni di esperienza con Perforce, gli utenti che tornano alle sincronizzazioni forzate abitualmente, poiché una normale sincronizzazione non fa ciò che si aspettano, non utilizzano correttamente Perforce.

È necessario lasciare che Perforce gestisca il proprio disco rigido per conto proprio: il server sa quali versioni dei file si hanno e quindi una normale sincronizzazione ottiene solo ciò di cui ha bisogno. Se fallisce, allora è quasi senza eccezione un segno che l'utente sta modificando, eliminando, aggiungendo, rinominando i file al di fuori di Perforce (ad esempio in Explorer).

A volte è possibile ottenere un sistema divertente (ad esempio, errore del PC) che causa questo, quindi non è necessariamente colpa dell'utente. Ma questi sono molto rari - da qui la mia qualifica "abitualmente" sopra.

Se pensi, mano a cuore, che non stai facendo nulla fuori dall'ordinario, quindi inizia a guardare quali altri processi potrebbero essere tweaking questi file. Per esempio. costruisci un sistema facendo qualcosa di strano e provi a modificare i file man mano che vengono creati? Hai una condivisione di rete aperta che forse qualcun altro sta inavvertitamente colpendo? Avete un sistema di backup che interferisce?

Spero che questo aiuti.

+2

soci Perforce quali versioni di quali file avete con il vostro ogni spec cliente. Queste informazioni sono conservate sul server con le specifiche di ciascun cliente - in ciò che chiamano la sua "lista". I client condivisi non sono una pratica tipica degli utenti. Sono consentiti da Perforce per abilitare determinati scenari di utilizzo. Ma se stai lavorando su macchine diverse, questo viene gestito avendo una specifica client per macchina. È esattamente ciò per cui sono stati progettati. –

+0

Supponiamo che tu abbia una build farm: vuoi creare uno spazio di lavoro (clientspec) per ogni computer nella farm? – sorin

+0

Sì, una specifica client per macchina sarebbe consigliabile nella maggior parte dei casi. Puoi automatizzare la loro creazione, tuttavia, quindi non è così doloroso come potresti pensare. –

4

Se si crea un'incoerenza, dove perforce perde traccia di ciò che sta accadendo nel proprio spazio di lavoro, si dovrebbe usare la funzione "Riconcilia lavoro offline ..." (in P4V).

Questo eseguirà una cartella diff e indicherà quali opzioni è necessario risolvere le incoerenze.

In generale, assicurarsi di controllare sempre i file in modo esplicito tramite perforce (aperto per la modifica). Questo sembra strano se sei abituato ad altri sistemi.

+3

Scusa ma non sto cercando di utilizzare il client visivo per questo. Per lo stesso progetto sincronizzo file da 6 diversi server perforce in modo che solo una soluzione batch sia accettabile - non voglio ripetere il processo manualmente. – sorin

+0

@sorin: hai mai trovato una soluzione accettabile? Mi sto imbattendo in qualcosa di simile quando tento di automatizzare le build. Non voglio forzare la sincronizzazione ogni volta, poiché ci vogliono circa 2 ore. – Jordan

+0

Scusa ma parlo più necessariamente. La mia ultima esperienza con loro è stata circa 5 anni fa. C'è solo un futuro per loro, uno simile al blackberry. – sorin

6

Come menzionato dalle altre risposte, è necessario creare un client separato (area di lavoro) per ogni "istanza" di un albero di directory sincronizzato dal depot.

Se si vuole forzare la sincronizzazione solo i file che sono stati modificati dal deposito:

p4 diff -se ... | p4 -x - sync -f 
p4 diff -sd ... | p4 -x - sync -f 

Attenzione: che sovrascrive qualsiasi localmente cambiato file (nella directory corrente e sottodirectory).

Se invece si è modificato alcuni file e dimenticato di aprirli per la modifica prima, si può fare questo:

p4 diff -se ... | p4 -x - edit 

che aprirà per modificare qualsiasi file che è diverso dal deposito.

E questo:

p4 diff -sd ... | p4 -x - delete 

aprirà per cancellare qualsiasi file che è stato eliminato a livello locale.

0

Credo che il comando che stai cercando sia p4 clean.

Da: http://www.perforce.com/perforce/r14.2/manuals/cmdref/p4_clean.html

"file presenti nell'area di lavoro, ma manca dal deposito vengono eliminati dall'area di lavoro file presenti nel deposito, ma manca lo spazio di lavoro La versione dei file che sono stati.. sincronizzati dal depot vengono aggiunti al tuo spazio di lavoro I file modificati nel tuo spazio di lavoro che non sono stati registrati sono ripristinati all'ultima versione sincronizzata dal depot. "

+0

P4 Clean eseguirà il lavoro in modo definitivo, ma su un progetto molto grande è estremamente lento (equivale a fare una riconciliazione con la gestione automatica dei casi rilevati a favore del server). Il caso migliore per l'OP è eseguire le operazioni sui file anche se per forza (cancella, sposta, modifica ecc.). Il controllo occasionale dovrebbe essere ancora eseguito per vedere se nulla è scivolato attraverso le fessure però. – Newtopian

Problemi correlati