L'immagine qui sotto è presa da SourceTree. Ho creato un semplice repository git con alcuni commit in esso. Per ogni commit, il commento dice quale ramo ero su quando ho fatto il commit.Perché i diagrammi di git branching non tracciano i rami "correttamente"?
Come si può vedere, il diagramma ad albero è (forse) non ottimali in quanto i commit al master non sono tutti dello stesso colore, né sono in una sola corsia. Perchè è questo?
(I diagrammi albero disegnato da GitHub e BitBucket sembrano soffrire di problemi simili, quindi non è solo SourceTree.)
Ovviamente non importa molto in questo semplice esempio, ma in alcuni dei miei progetti che usa una variante di git-flow, ed è spesso difficile tenere traccia di ognuna delle "nuotate" di git-flow quando osservi il diagramma ad albero. In parte, questo è dovuto al fatto che il diagramma ad albero non mantiene nel tempo ogni corsia da bagno dello stesso colore.
Il mio sospetto è che il diagramma ad albero sia (probabilmente) subottimale perché il repository git in realtà non contiene informazioni sufficienti per disegnare il diagramma ad albero nel modo in cui lo voglio. In particolare, quando due commit sono figli di un commit comune (es. Quando si dirama), git non sa se il commit padre è "sullo stesso ramo" come figlio 1 o figlio 2. Oppure, in un altro modo, non lo fa Non so quale bambino fosse il ramo e quale fosse la continuazione del tronco. Ho ragione?
I commit per dominare _are_ tutto in un'unica corsia: la corsia che passa da blu a viola al commit 94f458e. Per quanto riguarda il motivo per cui sono di un colore diverso, questa è una domanda per il codice sorgente più di Stack Overflow. Forse lo sviluppatore ha scelto di considerare il percorso dell'ultimo commit cronologicamente recente come il percorso di liberazione? Invia una richiesta di funzionalità per modificarla in base al nome del percorso. –
Quando ho detto "corsia", intendevo come "colonna". E quello che vorrei sarebbe se tutti i commit to master fossero in una singola colonna e quelli da rilasciare fossero in un'altra colonna. Voglio dire, se hai dato a un umano il DAG, i puntatori di ramo e le colonne di commit, probabilmente non disegnerebbero il diagramma ad albero come sopra disegnato. –
Mentre è vero, git non * richiede * agli utenti di fornire informazioni sufficienti per disegnare il dag con swimlanes corretti, un disegno migliore può essere dedotto in molti casi usando i messaggi di commit come suggerimenti. Ad esempio, i messaggi di unione in genere iniziano "Unisci ramo" B "in A"; in questi casi, è chiaro quali dovrebbero essere i nomi dei due rami di origine per i piani per le spiagge. Gli utenti possono facilmente aggiungere ancora più chiarezza; per esempio, ogni volta che creo un ramo, inserisco un commit vuoto iniziale in "Crea ramo" B "da" A "". I programmi di disegno grafico potrebbero fare un * molto * migliore lavoro nel prendere questi suggerimenti. –