SVN Экспорт только измененных файлов - PullRequest
13 голосов
/ 08 июня 2010

В настоящее время я фиксирую файлы на моем SVN-сервере (который находится на моем веб-хосте), и оттуда я SSH и экспортирую их в рабочий каталог в моем htdocs.

Поскольку мое приложение становится все больше и больше, полный экспорт - пустая трата времени. Как я могу экспортировать только файлы, которые были изменены?

svn export -r xxxx:HEAD http://svn/

Это решение, которое я нашел, так что, может быть, это может помочь? Как я могу автоматически получить ревизию?

Ответы [ 8 ]

7 голосов
/ 28 февраля 2012

Я использовал следующий скрипт Bash:

for i in $(svn diff --summarize -r 1:2 http://repo_path | awk '{ print $2 }'); do p=$(echo $i | sed -e 's{http://repo_path/{{'); mkdir -p $(dirname $p); svn export $i $p; done 

Подобно решению Худолеева, в этом случае он выводит изменения между ревизиями (1 и 2) и перебирает файлы и папки.

6 голосов
/ 30 июля 2010

Работает с использованием Tortoise SVN. Я не уверен, что без этого можно обойтись.

У меня была похожая проблема, когда я внес изменения в несколько тысяч файлов (не спрашивайте ... это унаследованная проблема!) Из 10 тысяч, поэтому я не хотел загружать весь каталог или полагаться на winscp для правильного совпадения дат (так как этот сервер находится в США, а я в AUS).

Итак, я зарегистрировался в SVN, затем через «Показать журнал» в черепахе SVN. Затем я щелкнул правой кнопкой мыши по самой последней редакции (хотя это может быть любая версия, в которой вы живете) и выбрал «сравнить с предыдущей редакцией». Затем я выбрал все появившиеся файлы (CTRL-A) и щелкнул правой кнопкой мыши «Export selection to», и BAM все обновленные файлы в правильной структуре папок были сохранены и готовы к загрузке.

2 голосов
/ 08 июня 2010

Я не знаю ни одного решения на основе чистого SVN, но вы можете попробовать следующее:

svn update | egrep "^(A|U)[ ]+(.*)" | cut -b 2 | xargs -i cp -R "{}" /path/to/public_html

В вашем рабочем каталоге вы получаете обновление и анализируете вывод - svn update.

Все файлы, отмеченные A и U, являются кандидатами для копирования - egrep "^(A|U)[ ]+(.*)".

Удалите A или U, чтобы получить имя файла - cut -b 2.

Копировать файлы, которые изменились с момента вашего последнего обновления - xargs -i cp -R "{}" /path/to/public_html.

(извините за неуклюжую оболочку, все еще учусь).

РЕДАКТИРОВАТЬ: Используйте cut вместо tr (исправлено)

2 голосов
/ 08 июня 2010

Я бы сделал проверку SVN в локальном репозитории, а затем rsync изменил файлы в корне сети. Или просто выполните проверку в webroot и запретите доступ ко всем каталогам .svn.

1 голос
/ 03 сентября 2011

Я думаю, это похоже на проблему, с которой я столкнулся. Часто мне нужно было зайти на мой веб-сервер только по тем файлам, которые были недавно изменены. Rsync не был доступен на веб-сервере, поэтому я не мог его использовать.
Есть еще одно решение, которое я использую в своей работе. Я использую SVN в сочетании с Trac , установленным на моем локальном сервере. Среди других Trac есть возможность показать изменения между двумя ревизиями или внесены в определенные ревизии. Если вы никогда не использовали Trac, посетите домашнюю страницу проекта Trac, чтобы просмотреть его хранилище. Это общедоступно.
В качестве примера я расширил последний стабильный выпуск (на момент написания этого поста), который составляет 0,12. Последняя ревизия, которую я вижу, - 10792. Вы можете щелкнуть номер ревизии, чтобы просмотреть журнал ревизий для этой ветви. Теперь вы можете сделать две вещи:

  • либо выберите две ревизии в столбце Diff и нажмите Просмотреть изменения , чтобы увидеть различия между ними
  • или щелкните маленький значок шестеренки в столбце Rev. , чтобы увидеть changeset , связанный с определенной ревизией (см. Эту страницу ).

В обоих случаях вы увидите похожую страницу со списком измененных файлов и красиво отформатированными изменениями между старыми и новыми файлами. Внизу страницы вы можете найти ссылки для загрузки различий в двух форматах: unified diff и zip . Последний - именно то, что вам нужно - zip-архив, содержащий только измененные файлы. Теперь вы можете разархивировать архив и легко перенести измененные файлы ftp на веб-сервер. В крупных проектах это действительно экономит время.
Если вы не знакомы с Trac, обратитесь к документации Trac, доступной на веб-страницах проекта, или, если вы предпочитаете, вы можете получить книгу Управление разработкой программного обеспечения с помощью Trac и Subversion , которая показалась мне действительно полезной.

1 голос
/ 05 августа 2010

Я не уверен, что это та же проблема, на которую вы ссылаетесь, но при фиксации файлов для веб-приложения, над которым я работаю, я использовал svn2ftp.py SVN hook автоматически FTP измененные файлы на промежуточный сервер. Его было довольно легко установить, и у меня никогда не было проблем с ним.

0 голосов
/ 12 ноября 2013

Примечание для любых других прохожих ... если вам нужны те же преимущества решения @ User123342234 при работе с Tortoise, но вы предпочитаете не вносить изменения в ваш общий / удаленный репозиторий, прежде чем сможете их экспортировать. Тот же результат может быть достигнут путем создания локального репозитория SVN с использованием Tortoise (малоизвестная особенность). Затем вы можете экспортировать удаленную ветку и импортировать ее в локальный репозиторий. Затем экспортируйте свою локальную измененную рабочую копию удаленного хранилища поверх рабочей копии своего локального хранилища и зафиксируйте ее. Теперь вы можете использовать «Показать журнал» в локальном репозитории, чтобы экспортировать изменения фиксации, и все это без необходимости сначала фиксировать в общий / удаленный репозиторий. Не обязательно тривиально, но, по крайней мере, однажды мне это помогло.

0 голосов
/ 29 ноября 2010

svn2ftp 0.3 - скрипт bash.свободно использовать, экспортировать файлы в FTP из хранилища SVN.(проверка ревизий) файлы: start.sh - скрипт, settings.properties - svn, ftp, свойства проекта.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...