2015-07-31 26 views
6

Problema: il repository svn legacy ha una directory sincronizzata dalla configurazione utente su un server prod.Filtro Elimina durante git svn clone?

La sincronizzazione in modo efficace:

  • elimina tutti i file
  • impegna
  • copia tutti i file
  • impegna

E 'possibile filtrare tutti i file di eliminazioni nel corso di una git svn clone di questo repo?

E il successivo git svn viene estratto?

Non voglio necessariamente filtrare l'intero commit solo le parti che eliminano i file.

Ciò significherebbe modificare i file di aggiunta successivi per diventare file di modifica.

risposta

1

Prima di tutto, se si vuole un maggiore controllo sulla vostra conversione pronti contro termine, si consiglia di considerare l'utilizzo di Reposurgeon piuttosto che git-svn


A causa del modo in cui Git funziona, l'impatto di queste pratiche malvagie in SVN sono meno gravi di quanto pensiate.

In primo luogo, Git non ha alcuna nozione di "cronologia file". Non esiste una "modifica di file" come in SVN o altri sistemi VCS. Git si limita a ricordare un albero di file. E poi un altro albero di file. Etc.

Se si confronta HEAD to HEAD ^^ (dove HEAD^è il commit "cancellato" che interviene), si ottengono risultati non diversi da quelli che si otterrebbero se si riuscisse a uscire dalla revisione "eliminata" del tutto.

Inoltre, i requisiti di archiviazione non saranno molto più grandi - Git memorizza interi oggetti e li confronta per similarità quando si creano i pacchetti, diversamente da SVN che utilizza la compressione delta (e quindi dipende da quella cronologia dei file). Albero A + albero vuoto + Albero B (composto per lo più dagli stessi file) occuperà un piccolissimo spazio in più rispetto a perdere le revisioni dell'albero vuoto.

+0

La preoccupazione qui sta avendo una storia utile dei file. Questa non è una conversione da repository, ma piuttosto uno specchio repo. Il repository SVN sta ancora attivamente ricevendo commit SVN. Ho risolto il problema con il manutentore ma la risoluzione è programmata come priorità bassa. – Gabriel

+0

Il commit delle SVN dalle tre sorgenti è effettivamente intercalato. C'è un modo per poterli deinterlacciare. Crea tre specchi che ciascuno prende ogni terzo commit con un offset? – Gabriel

+0

In realtà ogni sorgente ha un messaggio di commit univoco che usa ogni volta. Quindi forse ho solo bisogno di filtrare i commit sul messaggio di commit in tre nuovi repository? – Gabriel