2010-06-08 3 views
12

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

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

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

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

+0

Решение BASH для этого можно найти здесь: http://stackoverflow.com/questions/4783362/exporting-only-changed-files-from-subversion-maintaining-directory-structure – AnOldMan

ответ

1

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

2

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

+1

Почему вы так уверены, что нет выходят другие возможности? На самом деле, многие из них даже представлены среди ответов. Скрипт Bash, скрипт Perl, используя такие инструменты, как svn2web и т. Д. Что делает вас так уверенным, что вы представили все возможные варианты? – trejder

+0

+1 Okey, есть другие возможности. Я изменил ответ. – Daniel

+0

Привет! :] Хорошего дня! :] – trejder

2

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

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.

(Извините за неуклюжие ракушки-фу, все еще учащиеся).

EDIT: Используйте cut вместо tr (фиксированный)

+1

+1 для приятной командной строки. Я бы создал небольшой скрипт bash из него. Это снова можно вызвать удаленно, используя функцию «putty» «remote command», чтобы вы могли сделать обновление одним щелчком значка на рабочем столе. – Daniel

+0

@hudolejev: Есть ли шансы на смешение вашего решения, поэтому он будет экспортировать только файлы с изменениями по FTP на удаленный сервер вместо локального пути? Нужно, чтобы получить новую версию репозитория от сервера разработки на FTP-сервере, работающем на клиентской машине. Спасибо заранее ... – trejder

+0

Для загрузок я бы изменил последнюю часть на: 'xargs -i wput" {} "ftp: // server.url /' или даже использовать SCP: 'xargs -i scp -r "{}" server.url:/path/to/whatever'. Не проверял, просто догадывался. – hudolejev

6

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

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

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

0

svn2ftp 0.3 - скрипт bash. бесплатно использовать, экспортировать файлы в ftp из репозитория svn. (cheking revisions): start.sh - script, settings.properties - svn, ftp, свойства проекта.

+0

URL, который вы предоставили, больше не выходит. Кто-нибудь знает, где этот скрипт можно найти? Я спрашиваю именно о svn2ftp, так как есть похожие инструменты, такие как svn2web, которые я пробовал и не был удовлетворен результатами. – trejder

1

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

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

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

7

Я использую следующий 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 

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

+0

Тот же вопрос, что и для худолеева: Есть ли шансы на смешение вашего решения, поэтому он будет экспортировать только файлы изменений по FTP на удаленный сервер вместо локального пути? Нужно, чтобы получить новую версию репозитория от сервера разработки на FTP-сервере, работающем на клиентской машине. Спасибо заранее ... – trejder

+0

Отлично, теперь мне просто нужно изменить его на общий сценарий, который будет работать на репо, в котором я есть, и принимать номера ревизий в качестве параметров, и мне хорошо идти! –

0

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

Смежные вопросы