2012-05-04 11 views
5

Ho una semplice struttura di pronti contro termine in questo modo:Come vengono valutati i percorsi ignorati in git svn?

trunk 
    code 
    othercode 
    doc 
    misc 
branches 
    b1 
     code 
     othercode 
     doc 
     misc 
    b2 
tags 
    t1 
    t2 

Sto cercando di utilizzare git svn per clonare, ma voglio omettere doc e misc sul tronco + tutti i tag e rami. Tuttavia, l'opzione ignore-paths non si comporta come mi aspetterei.

ignore-paths = (doc|misc) 

sembra funzionare, ma sono preoccupato che escluderebbe anche un percorso come trunk/code/proj1/doc/, che voglio mantenere.

ignore-paths = ^(doc|misc) 

non funziona - doc e misc sono tirati in dal comando iniziale di git svn fetch. Come faccio a ottenere un'espressione regolare di lavoro che corrisponderà solo alle directory nella radice come questa? La pagina man non dice se le corrispondenze ignore-paths si confrontano con il percorso "relativo" che finirà alla radice del clone git (doc, ecc.) O il percorso "completo" come visto nel remoto SVN (branches/b1/doc ecc.) , o qualcos'altro.

risposta

9

Sembra che corrisponda al percorso completo nel repository SVN. Questa espressione regolare, che include la quota trunk/tags/branches del percorso di SVN, ha fatto il trucco:

ignore-paths = ^(trunk|tags/[^/]*|branches/[^/]*)/(doc|misc)/ 

In parole: il percorso deve iniziare con uno dei:

  • trunk
  • tags/ , forse seguito da un segmento di percorso (non contenente /)
  • branches/, forse seguito da un segmento di percorso (non contenente g /)

... poi segmento di tracciato chiamato doc o misc.

+0

Questo non funziona. I file sono comunque clonati. –

+0

Esiste un metodo equivalente per il repository svn senza layout svn? – Spen

+0

@besnep, se intendi "senza * il layout * svn standard", allora penso di sì: poiché la regex è confrontata con il percorso completo, puoi usarla indipendentemente da come è disposto il tuo repository. –