Non archiverei i rami. In altre parole, i rami si archiviano da soli. Quello che vuoi è garantire che le informazioni rilevanti per gli archeologi possano essere trovate con mezzi affidabili. Affidabili in quanto aiutano lo sviluppo quotidiano e non aggiungono un ulteriore passo al processo di completamento del lavoro. Cioè, non credo che la gente ricorderà di aggiungere un tag una volta che hanno finito con un ramo.
Ecco due semplici passaggi che aiuteranno notevolmente l'archeologia e lo sviluppo.
- Collega ogni ramo di attività a un problema associato nel tracker problemi utilizzando una semplice convenzione di denominazione .
- Utilizzare sempre
git merge --no-ff
per unire i rami delle attività; vuoi che unisci il commit e la bolla della cronologia, anche per un solo commit.
Questo è tutto. Perché? Perché come archeologo di codice, raramente inizio con la voglia di sapere che lavoro è stato fatto su una filiale. Molto più spesso è il motivo per cui in tutti i nove inferni urlanti è il codice scritto in questo modo ?!Devo cambiare il codice, ma ha alcune caratteristiche strane e devo risolverle per evitare di rompere qualcosa di importante.
Il prossimo passo è git blame
trovare i commit associati e quindi sperare che il messaggio di log sia esplicativo. Se ho bisogno di scavare più a fondo, scoprirò se il lavoro è stato svolto in un ramo e leggerò il ramo nel suo insieme (insieme al suo commento nel tracker dei problemi).
Diciamo git blame
punti su commit XYZ. Apro un browser della cronologia di Git (gitk, GitX git log --decorate --graph
, ecc ...), trovo commit XYZ e vedo ...
AA - BB - CC - DD - EE - FF - GG - II ...
\ /
QQ - UU - XYZ - JJ - MM
C'è il mio ramo! So che QQ, UU, XYZ, JJ e MM fanno tutti parte dello stesso ramo e dovrei guardare i loro messaggi di registro per i dettagli. So che GG sarà un commit di unione e avrà il nome del ramo che si spera sia associato a un problema nel tracker.
Se, per qualche motivo, voglio trovare un vecchio ramo, posso eseguirlo git log
e cercare il nome del ramo nel commit di unione. È abbastanza veloce anche su repository molto grandi.
Questo è ciò che intendo quando dico che i rami si archiviano da soli.
La codifica di ogni ramo aggiunge un lavoro inutile per portare a termine le cose (un processo critico che dovrebbe essere spietatamente semplificato), eleva la lista dei tag (non parlando di prestazioni, ma leggibilità umana) con centinaia di tag che sono solo occasionalmente utili, e non è è anche molto utile per l'archeologia.
git checkout [rev] file