2009-10-28 13 views
9

Il nostro team utilizza un flusso di lavoro git basato su merge e stiamo discutendo della possibilità di chiedere a tutti i membri del team di inviare tutto il lavoro al server un pomeriggio e una sera di ribadire il repo del server.Riscrivi automaticamente la cronologia git completa per liberarti di semplici commit di unione

I (penso) quello che vorrei fare automaticamente è che fintanto che tutti i commit sono solo sullo stesso set di rami E il numero di commit paralleli sono al di sotto di una data soglia vorrei ribattere la serie e rimuovere i commit di unione. Ma sono aperto ai suggerimenti?

Qualcuno sa come fare?

risposta

12

Secondo me dovresti evitare la tentazione di riscrivere la cronologia solo per renderla "carina". Non c'è davvero alcun senso. La storia, così com'è, è una rappresentazione più accurata della realtà e gli strumenti di reporting di Git sono tutti progettati per essere utili anche con molte piccole fusioni.

Se non sei interessato a visualizzare molte fusioni, puoi eliminarle da molte attività di reporting, ad es.

git log --no-merges 

cosa si sta proponendo (una serata di rebasing, presumibilmente causando tutti gli sviluppatori di avere a reset) sembra come la creazione di lavoro per il bene di lavoro.

+1

+1 per una buona messa a fuoco - "morsi di realtà". Git fornisce un così grande spazio per gli strumenti e così tante opzioni, può essere difficile sapere cosa è intelligente e cosa non lo è. Sono fermamente convinto di non creare lavoro per il lavoro, quindi probabilmente seguirò il tuo consiglio. – krosenvold

5

Non sono sicuro di quanto semplice possa essere. Se fai un rebase -i, tenterà di ignorare tutte le unioni, che riesce a fondersi senza conflitto, ma si ferma e ti aspetta se c'è stato un conflitto.

Se lo si invoca come rebase -i -p, d'altra parte, manterrà le unioni, che è ciò che si vuole quando l'utente ha fatto una vera unione, ma manca completamente il punto altrimenti.

Forse qualche sequenza dei due comandi, preservando l'unione solo quando si desidera, potrebbe portare a termine il lavoro in questo caso.

Devo essere d'accordo con Charles, tuttavia, che avere la storia riflette la realtà è molto più prezioso che renderlo "bello". Il fatto è che un commit è stato fatto senza la conoscenza dell'altro, e nel caso del codice sorgente questo può dirvi perché qualcosa potrebbe essere andato storto.

Il nostro team utilizza un flusso di lavoro git puramente unire a base

Cosa c'è di sbagliato con tirando sempre con --rebase (ad esempio git pull -r)? Se si desidera una topologia piatta, il modo più semplice è di non unire quando è possibile rebase.

Inoltre: si dice di voler appiattire solo se "l'unione è pulita". Sto solo speculando qui, ma non credo che i conflitti dei record git dopo il fatto diverso da una nota nel messaggio di commit predefinito, che potrebbe non essere ancora lì.

+1

+1 per tirare con --rebase. – mskfisher

Problemi correlati