2011-01-24 13 views
8

Quando faccio clic con il pulsante destro del mouse sulla copia di lavoro locale e selezionare il registro dello spettacolo. TortoiseSVN mi mostra il percorso completo di ogni file modificato per quella revisione. Dall'interfaccia tortoiseSVN quello che mi piacerebbe fare è il seguente.Esportare solo i file modificati da subversion che mantengono la struttura delle directory

quando faccio clic con il pulsante destro del mouse sul numero di revisione e selezionare l'esportazione. Vorrei esportare i file, mantenendoli nelle loro directory.

È possibile?

Per dirla in un altro modo, voglio esportare solo i file che ho modificato nell'ultimo commit, in una cartella sul mio harddrive (che non è la mia copia di lavoro) ma non voglio che siano tutti raggruppati in la directory genitore. Voglio che vengano copiati includendo il loro percorso relativo.

risposta

0

No, non è possibile. È possibile esportare l'intero repository in quella revisione o solo i file modificati con il percorso appiattito.

9

Mi rendo conto che questa è una domanda molto vecchio, ma rispondendo qui aiuterà le persone a cercare su google come me:

svn status | grep '^[ADMR]' | cut -b 8- | xargs -I '{}' cp --parents {} /temporary/destination/dir 
+0

+1 dal momento che ha lavorato molto per me, anche se, a rigor di termini, esso non risponde alla domanda originale dal momento che doesn funziona sotto Windows – martin

+0

Funzionerebbe sotto Windows con [Cygwin] (http://cygwin.com) installato? –

+0

Buon uomo! Lavorando per me.Ma tieni presente che questo esporta i cambiamenti non modificati. Ma funziona. – TodStoychev

1

BASH

Diciamo che si dispone di un server dev, con SVN, ma su il tuo server di produzione non hai SVN. Quindi devi esportare e SVN e caricare il sito esportato in produzione.

Ora si apportano modifiche, ma non si desidera rsync/caricare l'intera esportazione, solo le modifiche.

Sul Dev server:

(supponendo che hai estratto sito dev con svn checkout https://svn.server.com/web/sitename/trunk /path/to/sitename e assumendo file del sito dev sono alla testa)

cd /path/to/sitename/ 
zip /path/to/diff.zip $(svn diff --summarize -r 123:HEAD https://svn.server.com/web/sitename/trunk | awk '{ print $2 }' | sed -e 's{https://svn.server.com/web/sitename/trunk/{{') 

questo creerà un file ZIP con il file modificato [s] - in una struttura di directory intatta - dalla revisione 123: HEAD.

Se per qualche motivo non si vuole testa, poi:

cd /path/to/sitename/ 
svn up -r:124 
zip /path/to/diff.zip $(svn diff --summarize -r 123:124 https://svn.server.com/web/sitename/trunk | awk '{ print $2 }' | sed -e 's{https://svn.server.com/web/sitename/trunk/{{') 
svn up 

(imposta il DEV alla revisione desiderata, afferra file [s], quindi up Ritorna in testa)

+0

Come funziona: 'svn diff --summarize -r 123: 124 https://svn.server.com/web/sitename/trunk | awk '{print $ 2}' | sed -e 's {https://svn.server.com/web/sitename/trunk/ {{' 'richiama una lista di modifiche i.e' .somedir/somefile.ext' e passa a zip. Poiché il percorso sarà relativo, è necessario essere nella directory dev del sito. È possibile eseguire il comando svn diff stand-alone per vedere quale file [s] sarà incluso. – AnOldMan

1

Come questo è uno dei primi risultati su Google per esportare solo i file modificati con SVN, ho creato una versione batch per Windows. Non molto sofisticato, in quanto raramente ho bisogno di fare qualcosa in gruppo, ma dovrebbe fare il lavoro. Per il corretto funzionamento è necessario il file svn.exe nel percorso. Inoltre, fai attenzione a includere le barre finali posteriori nelle variabili della directory.

@echo off 
set maindir=C:\path\to\project\root\ 
set exportdir=C:\path\to\project\export\ 

:: Delete the export dir and create it again to get rid of the old files 
rd %exportdir% /S /Q 
md %exportdir% 

:: Go to the svn directory 
cd %maindir% 

:: Go through all "svn status" results 
FOR /f "tokens=*" %%G IN ('svn status') DO (call :copyfile "%%G") 
GOTO :eof 

:: Copy the files to the export directory 
:copyfile 
    :: We can't directly substr the file name, so we need to buffer it 
    set line=%1 

    :: substr the correct file name (character 9 to one before the end of the string) 
    set filepath=%line:~9,-1% 

    :: Copy the file (the asterisk means that it won't ask if directory or file) 
    xcopy %maindir%%filepath% %exportdir%%filepath%* /H 
    GOTO :eof 

Il comando di Linux è un po ' più breve. O utilizzare l'uno come si vede nella risposta di Joe, o questa ancora più breve (trovati here):

svn status | cut -c9-99999 | cpio -pvdmu /path/to/export 
Problemi correlati