Abbiamo utilizzato svn:externals
indicando il codice condiviso in pratica da alcuni anni. Abbiamo avuto alcuni problemi interessanti che probabilmente dovresti prendere in considerazione prima di usarlo. Qui è la struttura che abbiamo:
root
+---common
| +---lib1
| | \---trunk
| | +---include
| | \---src
| \---lib2
| \---trunk
| +---include
| \---src
+---proj1
| \---trunk
| +---include
| | \---common
| \---src
| \---common
\---proj2
\---trunk
+---include
| \---common
\---src
\---common
I common
directory in entrambe le include
e src
in un progetto contengono definizioni esterne che tirano nelle librerie comuni:
c:\dev> svn pget -v svn:externals proj1\trunk\src\common
Properties on 'c:\dev\proj1\trunk\src\common':
svn:externals : lib1 http://.../common/lib1/trunk/src
lib2 http://.../common/lib2/trunk/src
Il problema che abbiamo corriamo in è multiforme ma correlata al tagging e alla ramificazione della nostra fonte mentre i progetti cambiano nel tempo. La definizione esterni che ho mostrato sopra ha alcuni problemi abbastanza gravi se si vuole avere riproducibili costruisce:
- Si riferisce ad un target dinamico -
trunk
.
- Non si riferisce a una revisione esplicita.
Quando si dirama utilizzando svn copy
, gli esterni vengono copiati letteralmente poiché sono in realtà solo proprietà associate all'oggetto. Alcuni degli altri comandi svn (commit
, checkout
e export
) interpretano effettivamente le proprietà. Quando tagghi un progetto, vuoi davvero conservare lo stato del progetto per tutto il tempo. Ciò significa che devi "appuntare" gli elementi esterni a una revisione specifica, quindi devi cambiare la definizione degli esterni per fare esplicito riferimento alla revisione che desideri (ad es.,). Questo risolve un aspetto del problema.
Se è necessario mantenere più rami incompatibili del codice comune, è necessario specificare quale ramo si desidera esplicitamente insieme (eventualmente) alla revisione.
Inutile dire che questo può essere un po 'di mal di testa. Fortunatamente qualcuno là fuori in Subversion land scrive lo script svncopy.pl
che automatizza parte di questo pasticcio. Siamo ancora (e abbiamo lottato) con alcune delle difficoltà a sostenerlo in un prodotto distribuito sul campo con un mucchio di codice condiviso e un mandato di tre diverse versioni sul campo in qualsiasi momento.
Se si segue questa rotta, assicurarsi di considerare come verranno mantenuti i collegamenti man mano che i progetti aumentano e cambiano. Abbiamo scoperto che un po 'di tempo a pensare a un processo sarà molto importante qui.
fonte
2009-03-19 17:50:56
Vedere correlati: http://stackoverflow.com/questions/130447/should-i-store-all-projects-in-one -repository-or-mulitiple – harpo
Ho provato a esaminare le domande SVN di SO, ma non ho visto davvero questa situazione. Concesso, come ho detto, non riuscivo a capire come esprimere la query ... – cwallenpoole