Quello che devi realizzare, proveniente da CVS, è che non crei più directory quando crei una filiale.
Non più "tag sticky" (che può essere applicato a un solo file) o "tag branch".
Branch e tag sono due oggetti diversi in Git e si applicano sempre a tutti i repository.
Non dovresti più (con SVN questa volta) strutturare esplicitamente il tuo repository con:
branches
myFirstBranch
myProject
mySubDirs
mySecondBranch
...
tags
myFirstTag
myProject
mySubDirs
mySecondTag
...
Tale struttura deriva dal fatto che CVS è un sistema di revisione e non un sistema di versione (vedi Controllo del codice sorgente rispetto al controllo della revisione? ).
Ciò significa che i rami sono emulati attraverso tag per CVS, copie di directory per SVN.
La tua domanda ha senso se sei abituato a fare il checkout di un tag e inizi a lavorarci .
Che non dovresti;)
Un tag dovrebbe rappresentare un contenuto immutabile , utilizzato solo per accedervi con la garanzia di ottenere lo stesso contenuto ogni volta.
In Git, la storia delle revisioni è una serie di commit, che formano un grafico.
Un ramo è un percorso di quel grafico
x--x--x--x--x # one branch
\
--y----y # another branch
1.1
^
|
# a tag pointing to a commit
- Se esegui il checkout di un tag, dovrai creare un ramo per iniziare a lavorare da esso.
- Se esegui il checkout di un ramo, vedrai direttamente l'ultimo commit ('HEAD') di quel ramo.
Vedi la risposta di Jakub Narębski per tutti i tecnicismi, ma francamente, a questo punto, non hai bisogno (ancora) di tutti i dettagli;)
Il punto principale è: un tag essendo un semplice puntatore a un commit, non sarai mai in grado di modificarne il contenuto. Hai bisogno di un ramo.
Nel tuo caso, ogni sviluppatore lavora su una funzionalità specifica:
- dovrebbe creare il proprio ramo nel rispettivo repository
- tenere traccia dei rami dai repository dei loro colleghi (quello che lavora sulla stessa funzione)
- tirare / spingere per condividere il tuo lavoro con i tuoi pari.
Invece di tracciare direttamente i rami dei tuoi colleghi, puoi tracciare solo il ramo di un repository centrale "ufficiale" al quale ognuno spinge il proprio lavoro al fine di integrare e condividere il lavoro di tutti per questa particolare funzione.