Con il tempo sono pronto a fondersi mio ramo di nuovo in sviluppo (sottolineatura mia)
Gestire i conflitti in git merge
è spesso più semplice che in git rebase
. In Git Merge puoi vedere l'intero elenco di file che sono stati modificati contemporaneamente. Non importa quanti impegni sono stati fatti da altri colleghi, dovrai unirti una volta . Con il flusso di lavoro rebase, potresti finire per ottenere sempre gli stessi conflitti e doverli rivedere manualmente. Puoi finire per risolvere il 13 ° commit e sentirti come se non riuscissi a vedere la luce fuori dal tunnel .
In base alla mia esperienza, quando ho tentato di risolvere ingenuamente ripetuti conflitti di rebase, ho finito per perdere le modifiche di qualcuno o con un'applicazione che non è stata nemmeno compilata. Spesso io e i colleghi abbiamo lavorato molto, ma siamo stati così sopraffatti dalla complessità dei conflitti ripetuti che abbiamo dovuto interrompere e perdere il nostro lavoro precedente dopo una manciata di impegni di rebase.
Ti suggerirò alcune tecniche, ma possono solo aiutare l'unione a diventare più facile che automatizzare l'attività.
- File di risorse / lingua . Se sono presenti modifiche aggiuntive a un file di risorse, assicurarsi di spostarle sempre alla fine del file in modo da poter richiamare facilmente le modifiche rispetto alle modifiche altrui . Potresti essere in grado di copiare e incollare le modifiche sul fondo o semplicemente rimuovere i contrassegni di conflitto
- Fare. Non. ASSOLUTAMENTE. Formato RE . Né tu né i tuoi colleghi sviluppatori dovrete eseguire un "massiccio riformattamento del codice" durante il lavoro quotidiano. La riforma del codice aggiunge un numero eccessivo di falsi positivi nella gestione dei conflitti. È possibile eseguire la riformattazione del codice
- Incrementalmente, ad esempio da ogni sviluppatore su ogni commit, non appena utilizzano uno strumento automatizzato (ad esempio Eclipse ha un'opzione per riformattare il salvataggio, Vanilla Visual Studio non ne ha). Assolutamente ogni sviluppatore deve utilizzare gli stessi standard di formattazione del codice, codificati in un file di formato che viene mangiato dal tuo IDE. Per darti un'idea, se sono 4 spazi o 2 schede non importa, ma importa davvero se tutti usano lo stesso.
- Poco prima del rilascio, da un capo squadra. Se si verifica un commit di "riformattazione del codice" quando le persone non lavorano sui rami, cioè prima che si ramifichino, le cose renderanno più facili
- Rivedi il lavoro diviso tra colleghi. Questa è la parte in cui arriva la maggior parte dell'ingegneria. Come indicato da altre risposte, è odore di design se più sviluppatori che svolgono attività diverse devono toccare le stesse risorse. Potrebbe essere necessario discutere con il team leader su quale parte deve essere modificata da ogni sviluppatore simultaneo.
Ho anche visto alcune cattive abitudini nei flussi di lavoro di Git nei miei team. Spesso le persone si sovraccaricano nei loro rami. Ho assistito personalmente a uno sviluppatore che ha aggiunto da 10 a 20 commit etichettati "fix", ciascuno dei quali ha commesso una o due righe. La nostra politica è che gli commit siano etichettati con i biglietti JIRA per darti un'idea.
@JacobRobbins suggerisce di svolgere git rebase
un'attività quotidiana. Vorrei spingere in avanti il suo approccio.
In primo luogo, utilizzare rebase una volta solo per ridurre il numero di commit a una manciata. E rifa solo sul ramo di sviluppo originale , che è il commit da cui ti sei ramificato. Quando dico manciata, potrei significare 3 o 4 (ad esempio tutti i front-end, tutti i back-end, tutte le patch del database) o qualsiasi cifra umanamente ragionevole. Dopo averli consolidati, utilizzare fetch
e lavorare il rebase sul ramo upstream. Questo non ti salverà dai conflitti a meno che il tuo team non riveda il proprio approccio, ma renderà la tua vita meno dolorosa.
Se hai ulteriori domande sulle attività specifiche, sentiti libero di cercare e chiedere su Stackoverflow.
[Modifica] sulla regola no-reformat e boy scout. Ho leggermente riformulato il formato RE per evidenziare che quello che intendo è il compito di formattare da zero l'intero file sorgente, incluso il codice che non è stato toccato da te. Al contrario di formattare sempre il proprio codice, che è perfettamente boy-scouty, un certo numero di sviluppatori, incluso me stesso, viene utilizzato per riformattare l'intero file con le capacità dell'IDE. Quando il file viene toccato da altri, anche se le righe interessate non vengono modificate nel loro contenuto e semantica, Git lo vedrà come un conflitto. Solo un editor molto sensibile al linguaggio può suggerire che il conflitto è legato solo alla formattazione e all'unione automatica del frammento meglio formattato. Ma non ho prove di alcuno di questi strumenti.
Dopotutto, la regola del boy scout non ti obbliga a pulire il casino degli altri. Solo tua.