Экспорт только измененных файлов из структуры каталогов Subversion - PullRequest
8 голосов
/ 24 января 2011

Когда я щелкаю правой кнопкой мыши свою локальную рабочую копию и выбираю показать журнал. TortoiseSVN показывает мне полный путь каждого файла, измененного для этой ревизии. Из интерфейса tortoiseSVN я хотел бы сделать следующее.

, когда я щелкаю правой кнопкой мыши номер редакции и выбираю экспорт. Я хотел бы экспортировать файлы, сохраняя их в своих каталогах.

Возможно ли это?

Другими словами, я хочу экспортировать только файлы, которые я изменил во время последнего коммита, в папку на моем жестком диске (это не моя рабочая копия), но я не хочу, чтобы все они были сосредоточены родительский каталог. Я хочу, чтобы они были скопированы, включая их относительный путь.

Ответы [ 4 ]

9 голосов
/ 02 августа 2012

Я понимаю, что это очень старый вопрос, но ответы на него помогут людям, которые ищут в Google как я:

svn status | grep '^[ADMR]' | cut -b 8- | xargs -I '{}' cp --parents {} /temporary/destination/dir
2 голосов
/ 26 февраля 2016

Так как это один из первых результатов Google по экспорту только измененных файлов с SVN, я сделал пакетную версию для Windows. Не очень сложный, так как мне редко нужно что-то делать в пакетном режиме, но он должен делать свою работу. Вам нужно svn.exe на вашем пути, чтобы это работало. Также позаботьтесь о том, чтобы включить косые черты в переменные каталога.

@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

Команда Linux немного короче. Либо используйте тот, который показан в ответе Джо, либо еще более короткий (найден здесь ):

svn status | cut -c9-99999 | cpio -pvdmu /path/to/export
1 голос
/ 07 декабря 2013

BASH

Допустим, у вас есть сервер разработки с SVN, но на рабочем сервере у вас нет SVN.Таким образом, вы разрабатываете, экспортируете SVN и загружаете экспортированный сайт в производство.

Теперь вы вносите изменения, но не хотите rsync / загружать весь экспорт - только изменения.

На сервере Dev:

(при условии, что вы извлекли сайт разработчика с svn checkout https://svn.server.com/web/sitename/trunk /path/to/sitename и что файлы сайта разработчика находятся в 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/{{')

Это создаст ZIP-файл с измененным файлом [s] - в неповрежденной структуре каталогов - из ревизии 123: HEAD.

Если по какой-то причине вы не хотите HEAD, то:

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

(это устанавливает DEV на желаемоеревизия, захватывает файл [s], затем возвращается в HEAD)

0 голосов
/ 24 января 2011

Нет, это невозможно. Вы можете экспортировать весь репозиторий с этой ревизией или только измененные файлы с выровненным путем.

...