Come convertire una conversione di file?

3

Di 'che hai impegnato un file di tipo foo nel tuo preferito vcs :

$ vcs add data.foo
$ vcs commit -m "My data"

Dopo la pubblicazione ti rendi conto che c'è un formato dati migliore bar . Per convertire puoi utilizzare una di queste soluzioni:

$ vcs mv data.foo data.bar
$ vcs commit -m "Preparing to use format bar"
$ foo2bar --output data.bar data.bar
$ vcs commit -m "Actual foo to bar conversion"

o

$ foo2bar --output data.foo data.foo
$ vcs commit -m "Converted data to format bar"
$ vcs mv data.foo data.bar
$ vcs commit -m "Renamed to fit data type"

o

$ foo2bar --output data.bar data.foo
$ vcs rm data.foo
$ vcs add data.bar
$ vcs commit -m "Converted data to format bar"

Nei primi due casi la conversione non è un'operazione atomica e l'estensione del file è "sdraiata" nel primo commit. Nell'ultimo caso la conversione non verrà rilevata come un'operazione di spostamento, quindi per quanto posso dire sarà difficile tracciare la cronologia dei file attraverso il commit. Anche se preferirei istintivamente l'ultima soluzione, non posso fare a meno di pensare che la cronologia della traccia debba avere una priorità molto alta nel controllo della versione. Qual è la cosa migliore da fare qui?

    
posta l0b0 11.06.2012 - 00:11
fonte

2 risposte

4

Preferirei l'ultima soluzione.

Tuttavia, indipendentemente dalla soluzione scelta, è necessario assicurarsi di registrare la versione esatta e gli argomenti dello strumento di conversione nel messaggio di commit. La ragione di ciò è che in tutte e tre le soluzioni le diff (s) semplicemente non hanno senso. Semplicemente non puoi rivedere sensibilmente i commit.

Ma ciò che puoi fare, è controllare il vecchio commit, eseguire lo strumento te stesso e verificare che il suo output corrisponda a nuovo commit. In questo modo, non devi fidarti dell'enorme diff illegibile, devi solo fidarti dello strumento.

    
risposta data 11.06.2012 - 02:04
fonte
2

Bene, in git (e anche in altri), non importa se si sposta il file o meno. Le informazioni sull'operazione di spostamento non sono memorizzate nel repository. Git lo calcola in base alla somiglianza dei file quando lavori con la cronologia. Se il file convertito è molto diverso dall'originale (cosa che immagino sia probabile), non saprà che i due file sono correlati, indipendentemente dall'ordine in cui si commettono le cose. Se il file convertito è simile, saprà che i due file sono correlati, indipendentemente dal fatto che si utilizzi git mv o git add su un file e git rm sull'altro. ( git mv è semplicemente una scorciatoia per questi due comandi).

Ma stai parlando di subversion in particolare, dove il comando svn mv è registrato nel repository, e non posso rispondere a quale dovrebbe essere la migliore pratica, perché non uso più subversion, anche se dirò che la tua linea di ragionamento ha decisamente un senso.

    
risposta data 11.06.2012 - 00:27
fonte

Leggi altre domande sui tag