2010-02-25 6 views
34

questione connessa: Moving repository trunk to another’s branch (with history)SVN spostare singola directory in altri repository (con la storia)


So che si può scaricare un completo repository SVN con la storia e caricarla in un definito dall'utente (sub) directory del repository di destinazione utilizzando:

// in source repo 
> svnadmin dump . > mydumpfilename 

// in destination repo (backslashes because I'm using Windows) 
> svnadmin load . < mydumpfilename --parent-dir some\sub\directory 

Ma questo sarà importare il repository completo in sotto-directory del repository di destinazione. Quello che voglio è definire una sottodirectory nel repository sorgente che dovrebbe essere esportata. Qualcosa come svnadmin dump . --source-path old\sub\dir > mydumpfilename.

Come posso ottenere quello? Se TortoiseSVN può farlo, si prega di dirlo;)


SOLUZIONE: Grazie alla risposta di Tim Henigan, ecco il modo corretto per farlo:

// execute in destination repo 
svndumpfilter include source\sub\dir < mydumpfilename | svnadmin load . --parent-dir destination\sub\dir 

Spero che questo aiuterà gli altri, anche ...

+0

Penso che non sia possibile farlo, a parte copiare e applicare nuovamente ogni modifica, poiché le revisioni di subversion sono estese al repository, quindi spostare una singola directory con la cronologia non si applica in questo caso. Ad esempio, non i singoli file sono revisionati ma l'intero repository è revisionato e le differenze dell'intero repository sono memorizzate – Zenon

+0

Ottima domanda, grazie. – richo

+2

In realtà questa è solo metà della storia. Devi rimuovere anche la directory nel repository sorgente ricostruendola usando 'svndumpfilter exclude source \ sub \ dir', vedi http://stackoverflow.com/questions/205296/delete-file-contents-from- svn-history – Tino

risposta

20

Verificare svndumpfilter e questa sezione su Repository Maintenance.

Una volta ottenuto il dumpfile per l'intero repository precedente, è possibile utilizzare svndumpfilter per estrarre solo la parte desiderata.

Non sono a conoscenza di un modo per farlo con TortoiseSVN.

+0

Soluzione molto bella, funziona perfettamente. Grazie mille! – AndiDog

+0

E se sei confuso perché non funziona sul tuo computer locale, è perché "svndump' dovrebbe essere eseguito sull'origine del repository attuale. Usa 'svnrdump' invece - http://stackoverflow.com/questions/8866035/unable-to-an-svn-dump-error-e720002-and-format-errors – drzaus

0

Un po 'in ritardo per la festa, ma ... se hai tirato le copie locali di entrambi i repository usando TortoiseSVN, puoi effettivamente copiare una directory da una all'altra con la cronologia facendo clic destro sulla directory (o file) da Repo1 e trascinandolo su Repo2. Quando si rilascia il mouse si ottiene questo elenco di opzioni:

enter image description here

"elementi di versione SVN Export qui" copierà (ricorsivamente) con la storia.

+0

Non sto ottenendo la cronologia, né lo è aggiungendo i file al repository - cosa mi manca? – drzaus

+0

@drzaus: dopo aver spostato gli elementi localmente, è necessario impegnarli sul repository. Fino a quando non lo fai, SVN non registrerà gli elementi o la cronologia nel nuovo repository. – noisiveRevision

+0

Giusto per essere sicuro di capire - dopo aver esportato, ho bisogno di aggiungere manualmente tutti i file non verificati che ho appena esportato, e dopo averli accettati SVN avrà incluso la loro cronologia? – drzaus