2010-02-10 6 views
5

Quando un semplice refactoring come "rinominare campo" è stato eseguito su un ramo, può essere molto difficile unire le modifiche negli altri rami. (Metodo estratto è molto più difficile, come gli strumenti di unione non sembrano abbinare i blocchi non modificati e)C'è uno strumento di fusione a 3 vie che "capisce" il refactoring comune?

Ora nei miei sogni, sto pensando di uno strumento che può registrare (o di lavoro) che cosa refactoring ben definito le operazioni sono state eseguite su un ramo e quindi "riproducono" sull'altro ramo, invece di provare a unire tutte le righe interessate dal refactoring.

vedi anche "Is there an intelligent 3rd merge tool that understands VB.NET" per l'altra metà del mio dolore!


ha anche chiunque provare qualcosa di simile MolhadoRef (blog article about MolhadoRef and Refactoring-aware SCM), questo è, in teoria, controllo del codice sorgente refactoring-aware.

risposta

2

È possibile utilizzare coccinelle per eseguire lo stesso tipo di operazioni di refactoring su rami diversi. Non registrerà o capirà cosa si sta facendo da solo, devi dirlo esplicitamente cosa fare, ma a parte questo, più o meno senza sforzo eseguirà lo stesso refactoring su tutti i rami a cui lo si indirizza.

Questo strumento sono stati utilizzati nel kernel di Linux per updating API usage ecc

Per citare dalla sua pagina web:

"Coccinelle è un corrispondente programma e motore di trasformazione che fornisce la lingua Smpl (Lingua Semantica ) per specificare le corrispondenze e le trasformazioni desiderate nel codice C. "

+0

peccato che non funzioni per C# o VB.NET ma almeno qualcun altro ha pensato al problema. –

0

Araxis Merge non comprende il refactoring comune, ma è l'unico strumento di unione in tre modi che ho utilizzato. È disponibile sia per Mac che per Windows e supporta un'API di automazione, quindi immagino che tu possa fare quello che vuoi con che se tu fossi così inclinato, per la cronaca non ho niente con Araxis diverso da quello in cui ho usato il loro prodotto.

+0

abbiamo scoperto che Araxis Merge è uno dei migliori strumenti di unione convenzionali. (L'API di automazione non aiuterà, poiché ha bisogno dello strumento di refactoring per "possedere" il problema) –

-1

In Linux è possibile utilizzare Meld o in Windows Winmerge.

In entrambi i casi, entrambi gli strumenti "solo" comprendono le righe di testo. Il refactoring richiede un modo di comprendere il codice, che è al di là di qualsiasi strumento di fusione/confronto che io conosca.

2

Darcs supporta un 'token replace' operazione in un commit, che sostituisce tutte le istanze di un gettone con un altro, e si fonde come ci si desidera.

+0

il problema con "sostituzione token" è che l'ambito deve essere preso in considerazione per una rinomina sicura –

0

Plastic SCM (www.plasticscm.com) strumento di unione a 3 vie implementa Xmerge, che è l'unico in grado di assistere l'unione del codice che è stato spostato.

0

Ora ci sono alcuni strumenti di unione migliori (ad esempio SemanticMerge) basati sull'analisi del linguaggio, progettati per gestire il codice che è stato spostato e modificato. JetBrains (la creazione di ReShaper) ha appena pubblicato uno blog su questo.

C'è stato un sacco di research su questo nel corso degli anni, all'ultimo alcuni prodotti sono in arrivo sul mercato.

Problemi correlati