Мне стало комфортно с SVN, и теперь мне нужен способ более легкого развертывания моего кода на промежуточных или действующих серверах. Мне также нужен какой-нибудь метод для размещения информации о сборке в нижнем колонтитуле этого сайта, чтобы помочь в тестировании. Сайт - PHP / MySQL.






Скрипт для обновления svn по мере необходимости.
SVN поддерживает ключевые слова. Вы можете добавить ключевые слова, которые хотите раскрыть, в свойство ключевых слов, и тогда SVN развернется. См. $ Id $ или $ Rev $ или ключевые слова, описанные в книге SVN.
Сначала включите замену ключевых слов для файла, в котором вы хотите получить информацию о редакции:
svn propset svn:keywords "Rev" file.txt
Добавление к файлу, в котором вы хотите сохранить информацию о редакции:
$Rev$
Дополнительные чтения: http://svnbook.red-bean.com/en/1.4/svn.advanced.props.special.keywords.html
Если вы хотите обновить номер версии в проекте AssemblyInfo.cs, вам может быть интересна эта статья:
CodeProject: используйте номера редакций Subversion в своих проектах Visual Studio
If you enable SVN Keywords then every time you check in the project Subversion scans your files for certain "keywords" and replaces the keywords with some information.
For example, At the top of my source files I would create a header contain the following keywords:
'$Author:$
'$Id:$
'$Rev:$When I check this file into Subversion these keywords are replaced with the following:
'$Author: paulbetteridge $
'$Id: myfile.vb 145 2008-07-16 15:24:29Z paulbetteridge $
'$Rev: 145 $
Я фанат капистрано для толчков. Обратитесь к здесь.
Вы можете использовать SVN $ Rev $ свойство, чтобы поместить номер версии в нижний колонтитул.
Самый простой способ справиться с этим - настроить приложение следующим образом:
Просто сделайте свое приложение для развертывания рабочей копией вашей магистрали (svn co - проект в корневой каталог / www) и запустите svn up через консоль ssh (ssh [email protected] svn up /path/to/project), когда вам нужно обновить. Вы также можете выполнить откат с помощью соответствующих механизмов проверки. Это важно: если вы это сделаете, добавьте RewriteRules (или эквивалент) в ваш .htaccess (или эквивалент), чтобы запретить доступ к каталогам .svn.. Если вы не можете сделать это, вместо этого запустите svn export через ssh (чтобы он не был «рабочей копией»), но это, естественно, будет медленнее, чем выполнение up.
Кроме того, вы можете посмотреть, что Ruby on Rails делает с Capistrano ... это та же базовая концепция, но поддерживает транзакционное резервное копирование, если обновление идет не так в середине, сохраняя каждую проверку в отдельной папке и связывая "последнее" с вашим / www. каталог.
Методы свойств дадут вам только номер последней версии файла, в котором у вас есть свойство, а не головную ревизию всего репозитория (как нижний колонтитул переполнения стека). Если вы этого хотите, вам нужно использовать svnversion.
Недавно я начал использовать Capistrano в своем проекте, и он превосходный, очень гибкий и мощный. В итоге я довольно далеко отклонился от его обычного использования, но это значительно упрощает развертывание одним щелчком мыши.
Во многих случаях использование ключевых слов не сработает - например, если вы изменили исходный код перед развертыванием или если вы зарегистрируетесь из одного каталога в своем проекте, тогда другой каталог в том же проекте будет иметь разные номера ревизий. Внимательно проверьте документацию, чтобы убедиться, что ключевые слова делают то, что, по вашему мнению, они делают.
Лучше использовать программу svnversion для генерации информации о ваших извлеченных каталогах во время компиляции или развертывания. Svnversion покажет информацию о версии ВСЕХ ваших каталогов, а также отметит, был ли исходный код изменен локально.
Метод, который я придумал для своих проектов php, может быть не лучшим методом, но через некоторое время поиск, безусловно, кажется, состоит в том, чтобы выполнить проверку, запустить проверку версии, стереть папки .svn и двигаться дальше. Вот фрагмент сценария оболочки, который я написал:
(сначала вам нужен скрипт для проверки вашего репо)
# get the svn revision number and create a RELEASE file
svnvers=`svnversion .`
echo "version: $svnvers"
echo "<release><development>0</development><revision>$svnvers</revision></release>" > RELEASE
# remove all .svn directories
find . -name .svn -exec rm -rf {} \;
Обратите внимание, что этот метод помещает туда только ревизию file.txt, а не глобальную ревизию. См. Ссылку на книгу SVN Staale для подробностей.