2012-04-04 14 views
26

Sono un po 'come un nuovo controllo di versione con GIT. Ho letto questo Guide e sto seguendo l'approccio di base mostrato nello schema HERE. Tuttavia, ho alcuni dubbi su come utilizzare i rami git per separare lo sviluppo di nuove funzionalità dal codice esistente.Come utilizzare correttamente git e rami

Ecco un esempio. Supponiamo che alla partenza, il mio repository contiene i seguenti due rami principali:

  • branch master (contenente la versione di rilascio)
  • Develop Branch (contenente nuove correzioni o caratteristiche di separarli dalle caratteristiche progettuali esistenti)

Quando ho bisogno di sviluppare nuove funzionalità o moduli, creo le diramazioni da Develop e avviano i nuovi progetti di codice. Ad esempio, creo tre nuovi rami per aggiungere funzionalità correlate a Sun, Star e SuperNova. Ora, il mio archivio contiene cinque rami: ramo

  • Maestro: Release 1.0.0
  • Sviluppare ramo: Modifica dopo il rilascio 1.0.0
  • NewModule_Sun ramo: aggiungi Sun al progetto (creare da sviluppare ramo)
  • NewModule_Star ramo: aggiungi stella al progetto (creare da sviluppare ramo)
  • NewModule_SuperNova ramo: aggiungi SuperNova al progetto (creazione di Develop ramo)

Per la versione 1.0.1, desidero includere i moduli Sun e Star, ma non SuperNova. Così, ho unirli con Sviluppare e poi si fondono si sviluppano con il rilascio:

  1. Merge NewModule_Sun in Sviluppare
  2. Merge NewModule_Star in Sviluppare
  3. Unisci svilupparsi in Master (rilascio 1.0.1)

Il ramo Sviluppo deve essere mantenuto in modo permanente, ma i rami Sun e Star non sono più necessari. Essi vengono eliminati:

  1. Eliminare il ramo NewModule_Sun
  2. Eliminare il ramo NewModule_Star

Dopo questi cambiamenti mio repository contiene i seguenti tre rami:

  • Maestro Branch: Release 1.0. 1
  • Sviluppo diramazione: modifica dopo la versione 1.0.1
  • NewModule_SuperNova branch: modifica dopo la release 1.0.0 (creata da sviluppare quando non è stato fuso con i rami stella/Sun)

==

In primo luogo, sto utilizzando correttamente i rami Git?

In secondo luogo, ho esaminato la cronologia del ramo Sviluppo finale e sembra che abbia perso alcune informazioni sullo NewModules. È normale? E, è possibile trasferire tutte le informazioni sulla cronologia al ramo Sviluppo?

Grazie !!

+1

Questo può aiutare. http://stackoverflow.com/questions/2613903/does-deleting-a-branch-in-git-remove-it-from-the-history – codef0rmer

risposta

16

Sto facendo un uso corretto di git?

Sì, il flusso di lavoro che descrivi è praticamente un flusso di lavoro standard. Crei un ramo, ci lavori sopra e quando hai finito lo unisci e rimuovi il ramo non necessario (a meno che non continuerai a sviluppare su quel ramo).

Dopo aver rimosso un ramo, visualizzazione della cronologia mi sembra che ho perso ogni informazione circa la filiale stessa ... è normale?

Sì, questo è normale.

è possibile rimuovere un ramo lasciando le informazioni cronologiche ininterrotte?

Non so cosa intendi qui. Finché hai unito il ramo prima di eliminarlo, la cronologia è ancora lì. L'hai appena fuso in un altro ramo e la storia può essere vista su quel ramo. Non c'è modo di sapere quando un ramo è stato cancellato se è quello che stai chiedendo.

+0

ah ok .. Ero alla ricerca di un modo (che mi hai detto che è impossibile) per vedere l'inizio e la fine di un ramo ... è un peccato :( – Marcx

+0

@Marcx Sono un po 'in ritardo, ma è forse stanno ancora cercando questo flag "git merge --no-ff branchname" –

9

vi consiglio di leggere http://nvie.com/posts/a-successful-git-branching-model/ che definisce un buon modello per git ramificazione.

Ho scoperto che io continuo a rami di sviluppo per un periodo, fino al momento rende la cronologia delle modifiche che hai fatto in quelle revisioni non vale la pena tenere (circa 6 mesi), e quindi eliminarli.

+0

Ho letto che ... In realtà sto usando quel sistema di ... Non è stata spiegata la mia domanda sulla cancellazione di un ramo ... questo è fondamentalmente il mio dubbio principale :) – Marcx

+0

Grazie. Come n00b completo ai paradigmi di ramificazione, il tuo collegamento era esattamente ciò di cui avevo bisogno. –