Esiste un sistema di controllo della versione in grado di mostrare le modifiche a un metodo o funzione specifici? [chiuso]

11

A volte sarebbe bello poter dire qualcosa del tipo:

(git|svn|hg|etc) diff Foo.c:main
(git|svn|hg|etc) log log Foo.c:main

per vedere le modifiche apportate a una funzione specifica all'interno di un file sorgente dall'ultimo commit o la cronologia completa delle modifiche. La mia domanda è duplice:

  1. C'è qualcosa che fa questo?
  2. Uno strumento del genere sarebbe pratico? Dovrebbe fare qualche semplice analisi del codice ad ogni revisione per confrontare diverse versioni della funzione; il sovraccarico sarebbe troppo per essere efficiente?
posta chesles 19.11.2011 - 00:44
fonte

6 risposte

14
  1. Per quanto ne so, non lo è. Uno potrebbe, ma non mi aspetterei che fosse la qualità della produzione se lo facesse.
  2. Non penso che sia pratico, ma non per il motivo che hai elencato. Non è pratico perché il VCS dovrebbe essere linguistico per supportare questo tipo di funzionalità. Essenzialmente, avresti bisogno di incorporare qualcosa per analizzare il testo della lingua (uno dei grandi passi fatti da un compilatore). Questo aggiunge un sacco di peso extra a VCS, che sta già facendo un lavoro abbastanza complesso.
    Ma ancora più importante, dovresti fare la stessa cosa per ogni lingua che vuoi supportare. Un VCS che vende solo punti su codice C non otterrà molta trazione. Anche se ignori tutte le lingue oscure, sarebbe una grande impresa supportare anche le migliori 10 lingue.

E come ha sottolineato Robert, essere in grado di saltare immediatamente a un metodo non è un enorme vantaggio rispetto al dover saltare manualmente al metodo all'interno dello strumento diff.

    
risposta data 19.11.2011 - 01:03
fonte
8

svn in realtà fa qualcosa di simile a quello che vuoi.

Puoi usare il comando:

svn diff -x -p program.c 

Il -x -p fornisce il nome della funzione 'C' sopra il set di modifiche. che assomiglia a questo.

@@ -97,6 +102,8 @@ int function1(int *x)

Non filtra ma puoi grep / search per servire da vicino il tuo scopo.

Immagino che questo sia solo per "C" (o C / C ++). Comunque, suppongo, se c'è una richiesta, svn lo renderebbe disponibile anche per altre lingue.

Non mi associo abbastanza all'argomento secondo cui VCS dovrebbe NON farlo. Dopotutto vogliamo che tutti gli IDE o gli editor (come VIM, EMACS) eseguano l'evidenziazione della sintassi che è specifica per ogni lingua e ne supportano molti contemporaneamente. Quindi VCS essendo uno strumento di sviluppo, dovrebbe anche supportare tale funzionalità.

Certo, grazie alla tua domanda che l'ho scoperto. Non l'avevo mai usato prima.

    
risposta data 19.11.2011 - 05:58
fonte
1

Senza entrare nello specifico, ... ma potresti controllare il sito Semantic Designs e la gamma dei loro prodotti. Offrono alcuni strumenti che sono sensibili alla lingua , per così dire, in mancanza di un termine migliore.

    
risposta data 19.11.2011 - 15:23
fonte
1

Monticello può farlo (ad es. link ) ma questo è ovviamente un vero scandalo perché funziona solo per Smalltalk.

    
risposta data 19.11.2011 - 15:42
fonte
-1

Per mostrare quale revisione e autore hanno modificato per ultimo ogni riga di un file:

git blame filename
    
risposta data 19.11.2011 - 13:23
fonte
-1

ENVY e Store lo fanno entrambi. È interessante il fatto che, come con Monicello che Logan Capaldo ha menzionato sopra, anche questi sono per Smalltalk.

    
risposta data 07.07.2013 - 01:48
fonte

Leggi altre domande sui tag