Sto usando Git per tracciare qualche codice MATLAB. Un esempio di giocattolo illustra meglio il problema. Il progetto finora sembra così.Integrazione di indentazione e modifiche dei contenuti in Git durante l'unione: best practice?
C
/
A--
\
B
contenuto di A sono x=5
Facciamo commettere C, dove la linea viene modificato in x=6
Abbiamo poi facciamo commettere B, dove il nostro contenuto diventa come di seguito
if flag==1
x=5
end
Se tentiamo un'unione con l'obiettivo del progetto che assomiglia a
con il risultato di unione in D, otterremo un conflitto, perché la riga principale è stata modificata in entrambi (il rientro aggiunto in B, 5 è cambiato in 6 in C).
Esiste un modo migliore per integrare le modifiche all'indentazione da un ramo e le modifiche del contenuto da un altro ramo per ottenere un risultato di unione?
Ho letto su una strategia in https://stackoverflow.com/a/5262473/288545 e, mentre ciò eviterebbe il conflitto, eliminerebbe il rientro a favore della modifica del contenuto (che è un miglioramento, ma rende ancora più difficile leggere il codice).
Suppongo che potrei semplicemente risucchiarlo e non cambiare indentazione durante la scrittura del mio codice. Questo lo rende meno leggibile, ma non è un grosso problema in MATLAB. Comunque, in Python, l'indentazione conta davvero, quindi come si comportano le persone di Python? Questo diventa molto più brutto se ci sono grandi blocchi di codice che in seguito cambiamo per essere all'interno delle strutture di controllo, quindi la differenza tocca molte linee e rende i conflitti di fusione un enorme mal di testa.
Esiste una strategia di unione che gestirà separatamente le modifiche di spaziatura e le modifiche del contenuto e quindi le integrerà? Mi piacerebbe il risultato della fusione di essere
if flag==1
x=6
end
In python, indirizziamo tutti a 'PEP 8' che dice loro di indentare il loro codice con 4 spazi. Quindi, visto che stiamo scrivendo il codice con 4 indentazioni spaziali, non dobbiamo più preoccuparci di cambiare il rientro ... ;-) – mgilson
@mgilson Il problema sorge ancora se il codice era originariamente stand-alone (senza indentazione), e quindi lo si incorpora in una struttura di controllo, quindi deve essere rientrato. Anche se sei perfetto solo facendo 4 spazi, otterrai comunque un conflitto di unione, perché un ramo introduce 4 nuovi spazi e l'altro ramo introduce la modifica del contenuto. –
Il mio commento era principalmente scherzoso. Hai ragione, naturalmente. Tuttavia, in tal caso, non deve nemmeno essere indentato. Avrai un conflitto di unione ogni volta che sono presenti modifiche incompatibili allo stesso blocco di codice. Ecco perché Git ti obbliga ad affrontare questi cambiamenti incompatibili ea fonderli a mano ... ovviamente, ci sono molti strumenti che potresti provare a rendere meno doloroso con 'git mergetool' ... – mgilson