Recentemente ho lavorato a un codice numeroso di grandi dimensioni, refactoring e in generale migliorando il design per aumentare la copertura. Inoltre, in alcuni file ho rimosso le istruzioni di eccesso in eccesso, spostato i metodi in modo che funzionalità simili fossero vicine tra loro, aggiunte regioni ecc. Ma non effettivamente modificate la funzionalità del codice nel file.Esistono strumenti di unione per il controllo del codice sorgente che comprendono il codice?
Nel frattempo, altrove nel team altri sviluppatori stanno correggendo bug e cambiando righe di codice qua e là. Ovviamente quando si tratta di unire questo può essere un problema poiché i numeri di riga non corrispondono più e i metodi potrebbero essersi spostati.
Ora capisco la regola generale che in un ambiente controllato da sorgenti può essere una cosa pericolosa spostare i metodi e abbiamo deciso che il vantaggio ha superato il costo. Ciò che non capisco tuttavia è perché dovrebbe essere così.
dire che il mio file iniziale era una semplice calcolatrice:
public class Calculator
{
public int Subtract(int a, int b)
{
return a + b;
}
public int Add(int a, int b)
{
return a + b;
}
}
E ho deciso che volevo i metodi da alfabetico:
public class Calculator
{
public int Add(int a, int b)
{
return a + b;
}
public int Subtract(int a, int b)
{
return a + b;
}
}
Mentre un altro sviluppatore risolto il bug nel metodo di sottrazione
public class Calculator
{
public int Subtract(int a, int b)
{
return a - b;
}
public int Add(int a, int b)
{
return a + b;
}
}
Uno strumento di unione standard richiederebbe probabilmente di unire manualmente il Se due file, ma uno che comprendeva la funzionalità del codice sarebbe facilmente in grado di riconciliare queste due modifiche. Lo stesso vale per la rimozione o l'aggiunta di altri metodi, commenti, regioni o istruzioni.
Quindi, per (finalmente!) Arrivare alla domanda: ci sono strumenti di unione che hanno una comprensione intelligente della funzionalità del codice e potrebbero unire i due file sopra senza alcun intervento umano? Se no, perché no? Ci sono delle complicazioni che rendono questo problema irrisolvibile (ovviamente è comprensibile che non sia così semplice come sto insinuando - ma è impossibile per qualche motivo che non riesco a vedere?)
Io uso C# in il mio codice sorgente e mi piacerebbe qualcosa che ha funzionato con quello, ma io sono interessato a se questo esiste in qualsiasi parte del mondo della programmazione ...
io sono già molto preoccupato per la lunghezza di questa domanda, ma modificato per aggiungere come mi aspetto che il sistema di origine intelligente funzioni:
Quando il file della calcolatrice iniziale è stato controllato nel sistema ass il file e creare una gerarchia della classe:
File: Calculator.cs
|
|--Class[0]: Calculator
|
|--Method[0]: Subtract
|
|--Line[0]: return a + b;
|
|--Method[1]: Add
|
|--Line[0]: return a +b;
(Con le linee in più in là per bretelle ecc ...)
Quando controllo nel mio codice (rendendo i metodi alfabetico) aggiorna la gerarchia superiore in modo tale che Sottrai diventa Metodo [1] e Aggiungi diventa Metodo [0].
Il secondo sviluppatore controlla il suo codice (che ovviamente il sistema di controllo del codice sorgente era basato sull'originale) e nota la modifica alla prima riga in sottrazione. Ora, invece di trovare quel numero linea per riga nel file generale, sa che può trovarlo Calculator.cs/Calculator/Subtract/0 e il fatto che il metodo abbia cambiato posizione non ha importanza, può comunque fare il unire il lavoro
Quale dovrebbe essere il risultato della riconciliazione "automatica"? Il problema non è la comprensione della lingua tanto quanto la comprensione dell'intento dei programmatori - e questo richiederebbe la telepatia! –
Avrei pensato che un sistema che comprendesse la funzionalità del codice e potesse separarlo dal layout vedrebbe che il primo cambiamento era puramente layout, quindi applicalo al layout del file e la seconda modifica era puramente funzionale, quindi applica quel cambiamento al metodo in cui è avvenuto il cambiamento funzionale, ovunque quel metodo possa essere ora. –
Il mio sospetto è che una tale bestia non esista, ma mi piacerebbe vedere altre risposte. Ho la sensazione che un sistema del genere starebbe al limite con l'intelligenza artificiale e porterebbe a SkyNET VCS. ;) –