Trasformazioni del codice di commit in git

2

Esiste un modo per commettere trasformazioni di codice o refactoring in git, magari come metadati per un commit effettivo, in modo che gli strumenti di modifica del codice possano applicare il cambiamento come trasformazione concettuale anziché un intero lotto di modifiche del testo?

Per illustrare, supponiamo che una classe abbia una proprietà pubblica FOO. Qualcuno potrebbe rinominare FOO in BAR e commetterlo. Sfortunatamente ora ogni altro ramo che usa FOO ora avrà un conflitto di fusione o un'interruzione nella compilazione. Se invece il cambiamento fosse in qualche modo memorizzato come "refactor: rinominare FOO in BAR", quindi, su rebase, la modifica verrebbe implementata anche in altri rami.

Potrebbe essere che alcuni strumenti di codice che conoscono la lingua siano intelligenti in proposito e dicono "Oops, questa cosa non ha proprietà FOO. Ha mai avuto una proprietà FOO? Lasciami guardare indietro nella storia di git e aha, sì, sì, ora si chiama BAR. Aggiungo anche qui FOO to BAR. ". Ciò non richiederebbe alcuna annotazione speciale.

Personalmente la mia risposta è "non rinominare le cose a meno che non sia assolutamente necessario". Sfortunatamente gli editori hanno pulsanti di refactoring e alcune persone sono felici. Se c'è un pulsante, perché non premere? È così semplice e veloce!

    
posta Max Murphy 13.07.2018 - 13:38
fonte

2 risposte

3

In git, puoi ottenere ciò utilizzando un driver di fusione personalizzato . Sfortunatamente, un driver di fusione che utilizzava gli alberi di sintassi sarebbe piuttosto complesso e anche specifico della lingua. Non sono personalmente a conoscenza di eventuali implementazioni esistenti, ma è certamente realizzabile.

    
risposta data 13.07.2018 - 13:56
fonte
2

Questo non è un problema di controllo della sorgente. Dato che non hai specificato una lingua, posso fare alcune generalizzazioni.

Lingue come Java e C # consentono di annotare il codice come "obsoleto". Questo dovrebbe generare un avvertimento del compilatore. La maggior parte delle lingue che supportano questo tipo di annotazioni consentono di mostrare un messaggio nell'output del compilatore.

Questo è il punto 1.

Il passaggio 2 sta comunicando con il tuo team.

Rinominare le cose dovrebbe essere fatto quando ha senso, ma non dovrebbe essere fatto nel vuoto. Devi comunicare queste cose. Le annotazioni che generano avvertimenti durante la compilazione del codice fanno due cose:

  1. Mostra agli altri sviluppatori come correggere l'avviso
  2. Dà tempo agli altri sviluppatori di terminare i loro pensieri prima di occuparsi dell'identificatore rinominato.

A un certo punto puoi rimuovere l'identificatore "rinominato" o passare un flag all'annotazione che causa un errore del compilatore, costringendo le persone a correggerlo.

Il controllo del codice sorgente non è la risposta. Si tratta di comunicazione e coordinamento.

    
risposta data 14.07.2018 - 03:53
fonte

Leggi altre domande sui tag