Подтвердить что ты не робот

SVN Export Only Измененные файлы

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

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

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

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

4b9b3361

Ответ 1

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

Ответ 2

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

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) в этом случае и перебирает файлы и папки.

Ответ 3

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

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

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

Ответ 4

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

Ответ 5

Нет чистого решения 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.

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

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

Ответ 6

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

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

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

Ответ 7

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

Ответ 8

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