2010-01-28 13 views
6

Ecco la situazione: abbiamo un enorme repository svn, che è il "master" (non è possibile cambiarlo perché è effettivamente "di proprietà" di un'altra azienda). Preferiremmo lavorare localmente in git per ottenere la flessibilità e la velocità di ramificazione offerte da git. Ma non vogliamo clonare l'intero repository.Come creare un clone git con rami di un "sottoprogetto"?

La struttura repository sembra grosso modo così:

/trunk/project1/* 
     /project2/* 
/branches/branch/project1/* 
       /project2/* 
/tags/tag1/tag1a/project1/* 
      /tag1b/project1/* 
    /tag2/tag2a/project2/* 

Mi interessa solo in project1, ma mi piacerebbe avere sia tronco e rami (i tag non sono così importanti, ma sarebbe bello prendili anche tu).

Sono in grado di ottenere un unico ramo clonato con queste impostazioni svn-remote:

[svn-remote "svn"] 
    url = https://svn.company.com/svn/branches/branch1/project1 

ma voglio davvero ottenere la struttura ramificata, anche. Ho pensato di usare ignorare-percorsi:

[svn-remote "svn"] 
    ignore-paths=^project2|^project3|... 

ma avrei dovuto aggiornare i ignorare-percorsi ogni volta che viene aggiunta una nuova directory di primo livello "progetto", che non è davvero sostenibile.

In secondo luogo, abbiamo davvero bisogno solo dei tag in/tag/tag1 (se abbiamo bisogno di tag). Qualsiasi idea su come farlo sarebbe apprezzata.

risposta

6

Penso che la segue nel file .git/config dovrebbe funzionare:

[svn-remote "svn"] 
    url = https://svn.company.com/svn 
    trunk = trunk/project1:refs/remotes/svn/trunk 
    tags = tags/*/project1:refs/remotes/svn/tags/* 
    branches = branches/*/project1:refs/remotes/svn/branches/* 

ho basa in particolare su configuration section of the git-svn manpage

+0

Sì, che ha fatto il lavoro. Una stranezza è che il percorso di esclusione che ha funzionato quando stavo controllando un singolo ramo sembra non funzionare qui. Avevo url = https://svn.company.com/svn/branches/branch1/project1 ignore-paths =^baddir/ e "baddir" non è stato prelevato da svn. Con gli stessi percorsi ignorati ma i precedenti svn-remote def, viene recuperato "baddir". – Spencer