2011-01-24 16 views
8

Kiedy kliknę prawym przyciskiem myszy moją lokalną kopię roboczą i wybierz opcję Pokaż dziennik. TortoiseSVN pokazuje mi pełną ścieżkę każdego pliku zmienionego dla tej wersji. Z interfejsu tortoiseSVN, co chciałbym zrobić, jest następujący.Eksportowanie Zmieniono tylko pliki z subversion zachowujące strukturę katalogów

po kliknięciu prawym przyciskiem myszy numeru wersji i wyeksportowaniu. Chciałbym, żeby wyeksportował pliki, zachowując je w swoich katalogach.

Czy to możliwe? Innymi słowy, chcę wyeksportować tylko te pliki, które zmieniłem w ostatnim zatwierdzeniu, do folderu na moim dysku twardym (to nie jest moja kopia robocza), ale nie chcę, aby wszystkie były scalone w katalog nadrzędny. Chcę je skopiować, w tym ich względną ścieżkę.

Odpowiedz

0

Nie, nie jest to możliwe. Możesz wyeksportować całe repozytorium w tej wersji lub po prostu zmienione pliki ze spłaszczoną ścieżką.

9

Zdaję sobie sprawę, że jest to bardzo stare pytanie, ale odpowiadając tutaj pomoże ludzie szukają w Google, jak ja:

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

+1 ponieważ pracował wielki dla mnie, chociaż, ściśle mówiąc, to nie ma odpowiedzi na oryginalne pytanie, ponieważ nie robi działa pod Windows – martin

+0

Czy to działałoby pod Windows z zainstalowanym [Cygwin] (http://cygwin.com)? –

+0

Dobry człowiek! Pracuję dla mnie.Należy jednak pamiętać, że eksportuje niezamówione zmiany. Ale działa. – TodStoychev

1

BASH

Powiedzmy masz serwer dev, z SVN, ale na twój serwer produkcyjny nie masz SVN. Tak więc programista i eksport SVN i przesyłają wyeksportowaną witrynę do produkcji.

Teraz wprowadzasz zmiany, ale nie chcesz rsync/upload całego eksportu - tylko zmiany.

Na serwerze Dev:

(zakładając, że wyrejestrowany witryny dev z svn checkout https://svn.server.com/web/sitename/trunk /path/to/sitename i zakładając pliki witryna dev są HEAD)

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/{{') 

To utworzy plik ZIP ze zmienionym pliku [s] - w nienaruszonej strukturze katalogów - od wersji 123: HEAD.

Jeśli z jakiegoś powodu nie chcesz głową, a potem:

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 

(Ustawia DEV do żądanej rewizji, chwyta plik [s], a następnie z powrotem do wzloty głowie)

+0

Jak to działa: '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/ {{' 'pobiera listę zmian, tj.' samiedir/somefile.ext' i przekazuje ją do zip. Ponieważ ścieżka będzie względna, musisz znajdować się w katalogu dev witryny. Możesz uruchomić autonomiczne polecenie svn diff, aby zobaczyć, jakie pliki zostaną dołączone. – AnOldMan

1

jako jest to jeden z pierwszych wyników Google dla eksportujących tylko zmienione pliki z SVN, zrobiłem wersję wsadową dla systemu Windows. Niezbyt wyrafinowane, ponieważ rzadko muszę coś robić w partii, ale powinno się to wykonać. Musisz użyć svn.exe na swojej ścieżce, aby to zadziałało. Należy również uwzględnić tylne ukośniki w zmiennych katalogowych.

@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 

Komenda Linux jest nieco krótszy. Albo skorzystać z jednego, jak widać na odpowiedź Joe, czy to nawet krótsza (znaleziono here):

svn status | cut -c9-99999 | cpio -pvdmu /path/to/export 
Powiązane problemy