2012-06-13 5 views
7

Ho una soluzione denominata "Framework" che è un assembly C# per la mia logica aziendale e le transazioni di dati.Raccomandazione ramificazione TFS

Ho 4 applicazioni che utilizzano Framework, 1 sito Web, 1 app Console e 3 altri tipi di applicazioni.

$/TeamProject 
    /Framework 
     /Dev 
     /Main 
     /Release 
    /WebApp 
     /Dev 
     /Main 
     /Release 
    /WCFApp 
     /Dev 
     /Main 
     /Release 

Ho tutti questi in un progetto di squadra con ogni assembly/applicazione sotto la propria cartella.

Desidero utilizzare la funzione di diramazione per ciascuna delle applicazioni che condividono l'assieme Framework ma non so quale sia il modo migliore per diramare l'applicazione insieme al framework?

Qualche suggerimento?

So come funzionano Branching and merging, ma tutti gli esempi dimostrano solo la ramificazione di tutto ciò che è contenuto in una cartella.

+0

mostrato come i miei file in controllo sorgente attualmente guardano –

risposta

7

Alla luce di un quadro che rappresenta la directory di controllo del codice sorgente, farò la seguente ipotesi:

 
$/TeamProject 
    /Framework 
    /Console 
    /Web 
    /etc. 

Quello che dovete fare prima è creare una cartella chiamata Main in $/TeamProject (questo sarà il vostro principale - aka trunk - branch) e sposta tutte le cartelle di primo livello in esso.

Allora abbiamo:

 
$/TeamProject 
    /Main 
    /Framework 
    /Console 
    /Web 
    /etc. 

Ora è necessario convertire Main ad un ramo, si può fare questo facendo clic destro sulla cartella Main e scegliere "Converti in succursale". Ora TFS consente di diramare lo $/TeamProject/Main in $/TeamProject/ConsoleV2 (ad esempio) e di lavorare sulle funzionalità per V2 della console. È possibile modificare l'applicazione console e il framework, se necessario, in questo ramo. Una volta completato questo lavoro, è possibile Invertire l'integrazione (unire) le modifiche in Main.

Ricordarsi di continuare ad eseguire l'integrazione in avanti delle integrazioni (unire in basso) da Main al ramo delle funzionalità e risolvere eventuali conflitti per mantenere sincronizzate le basi di codice.

Con questo approccio è possibile modificare qualsiasi parte di qualsiasi prodotto in un singolo controllo atomico, ad esempio, si modifica un'API sul framework aggiungendo un nuovo parametro obbligatorio a un metodo, è possibile modificarlo in tutte le tue app allo stesso tempo e quando l'RI si unisce a Main, tutto verrà aggiornato.

+0

Sono a conoscenza di questo approccio, il problema con questo è se voglio Brach mia Console App insieme con il Framework che devo Branch tutto accanto a esso ... è questo il solito approccio? Sembra un po 'eccessivo uccidere –

+0

Il punto in cui si diramano nel repository di origine non cambierà la dimensione del ramo che crea. Abbiamo utilizzato questo approccio per ramificare diverse parti della nostra applicazione che sono indipendenti dalla versione in modo da poter aggiornare parti dipendenti allo stesso tempo. Puoi semplicemente ignorare le cartelle su cui non lavori. – DaveShaw

+0

Ho aggiunto un "visual" di come il mio codice sorgente è attualmente strutturato nel mio progetto di squadra –

-2

Se si desidera una fusione & per singoli progetti, l'unico modo per ottenerlo in TFS è creare un progetto TFS separato per ciascuno dei progetti nella soluzione. Spero che abbia un senso. Una volta, lo fai, quindi puoi inserire il codice di ogni progetto nella tua directory di lavoro.

Abbiamo migrato il nostro codice da VSS in TFS poco tempo fa. A quel tempo, dovevamo decidere di inserire tutto il codice in un progetto TFS o di romperlo. Quindi, abbiamo un sito Web, una biblioteca aziendale (che viene utilizzata dal sito Web & altre app), un livello dati. Abbiamo creato un progetto TFS separato per la biblioteca, il sito Web e i progetti del livello dati. Ogni progetto avrebbe un ramo di tronco. Tutti quelli che hanno bisogno dell'ultima vorrebbe staccare la propria copia dal bagagliaio e unirsi di nuovo lì.

Spero che questo aiuti.

+0

Allora, come si uniscono ogni gruppo in 1 ramo? –

+0

Ecco la cosa. Ogni sviluppatore dovrebbe mantenere un file di soluzione locale. Quindi, se ho bisogno del sito web, della biblioteca e della libreria di accesso ai dati, otterrei quei rami da TFS nella soluzione alla mia estremità e non controllerò mai la soluzione. – Skadoosh

+0

Dai uno sguardo a questi: http://stackoverflow.com/questions/400517/tfs-structure-multiple-projects-or-single-project e http://stackoverflow.com/questions/867628/merging-and-branching -shared-code-between-projects-in-tfs – Skadoosh

2

La tua domanda principale, a quanto ho capito, è "Qual è la migliore struttura di ramificazione per ramificare le mie applicazioni che dipendono da Framework?" Se crei e li rilasci sempre e li rilasci insieme, è più semplice e meno costoso suddividerli tutti insieme come descritto da DaveShaw; tuttavia, se ciascuno di essi è sviluppato da team diversi, ha programmi di rilascio diversi, ha versioni diverse, ecc. di quanto si vorrà creare un ramo MAIN sotto ciascuno di essi. In questo caso, dovrebbe anche essere chiaro chi possiede le modifiche al Framework. Di solito è una buona idea controllare l'accesso al check-in solo a chi ne ha bisogno per progetti condivisi come Framework.

Se quest'ultimo caso è vero, allora penso che il tuo grafico attuale lo gestisca bene, ma vorrei fare un cambiamento; Mantenere i tuoi rilasci allo stesso livello nella gerarchia del ramo MAIN in modo che il percorso relativo rimanga lo stesso per la creazione di riferimenti; Questo semplificherà le mappature delle aree di lavoro:

$/TeamProject 
    /Framework 
     /Dev 
     /Main 
     /Release1 
     /Release2 
     /Release3 
     ... 
    /WebApp 
     /Dev 
     /Main 
     /Release 
      /Release1 
      /Release2 
      /Release3 
      ... 
    /WCFApp 
    ...