Внизу Stack Overflow указан номер версии Subversion:
svn revision: 679
Я хочу использовать такое автоматическое управление версиями с моими проектами / решениями .NET Web Site/Application
, Windows Forms, WPD.
Как мне это реализовать?
@Balloon Если вы используете TortoiseSVN, вы можете использовать упакованную программу SubWCRev. Он запрашивает рабочую копию и сообщает вам только самый высокий номер редакции. По общему признанию, это кажется подходом на стороне клиента к проблеме на стороне сервера, но поскольку это хорошая программа командной строки, вы должны иметь возможность довольно легко записывать ее вывод для использования.
Если вы не используете TortoiseSVN для SubWCRev, как я сказал здесь, вы можете использовать svnversion, который делает то же самое.
Вы можете сделать это, добавив следующее в любом месте вашего кода
$Id:$
Так, например, @Jeff сделал:
<div id = "svnrevision">svn revision: $Id:$</div>
и при проверке на сервере заменил $ Id: $ на текущий номер версии. Я тоже нашел эту ссылку.
Также есть $ Дата: $, $ Rev: $, Редакция $: $
Разве это не просто вставит номер версии последнего изменения в этот конкретный файл? Я попытался настроить репозиторий с двумя файлами и изменил один, а также попробовал экспортировать и оформить заказ, а другой файл остался на 1 в обоих случаях.
lassevk верен, это изменяется только при изменении самого файла.
Используя VisualSVN и TortoiseSVN, добавление $ Id: $ просто заставляло страницу отображать «$ Id: $». Может быть полезно отметить, на каком сервере / клиенте работает этот ответ.
Вам также необходимо добавить в файл свойство svn:keywords
Subversion и убедиться, что оно включает значение Id
. Однако от этого мало толку: возможно, этот конкретный файл не был изменен.
Вам необходимо убедиться, что для файлов установлен атрибут svn: keywords, иначе $ Id $ и т. д. Не будут заменены автоматически. См. Страницу это. (Прокрутите вниз до svn: ключевые слова)
Я только что попробовал это с помощью $ Rev $, и это работает - до некоторой степени. Проблема в том, что он, кажется, обновляет ключевое слово только при изменении файла, в котором оно отображается. Это означает, что если в проект внесены изменения, которые не влияют на файл с $ Rev $ в нем (в моем случае, моя главная страница ASP.NET), проект будет иметь более высокую версию, чем отображается для пользователя. . Есть ли у кого-нибудь мысли по этому поводу? Есть ли способ заставить SVN обновить всегда ключевые слова в файле?
Похоже, что Джефф использует CruiseControl.NET, основываясь на некоторых записях подкастов. Похоже, что у него есть возможности автоматического развертывания от управления версиями до производства. Может это там и происходит прошивка?
Если вы не используете CruiseControl.Net, ознакомьтесь с моим ответом (бессовестная вилка!) - stackoverflow.com/questions/163/…; o)
ссылка не работает @saint_groceon
$rev
и другие подобные - это версии отдельных файлов, поэтому они не изменятся, если файл не изменится. Номер на веб-странице (скорее всего, я предполагаю здесь) номер версии svn для всего проекта. Это отличается от ревизий файлов, на которые указывали другие.
В этом случае я предполагаю, что CCNET извлекает номер редакции проекта и переписывает часть веб-страницы с этим номером. Любое решение CI должно уметь это делать, настройте это самостоятельно с помощью CCNET и Teamcity (хотя и не веб-страницы, а автоматическое управление версиями версий развертывания / сборки).
Для этого используйте решение CI, которое его поддерживает, или используйте процесс сборки (MSbuild / Nant), чтобы сохранить эту версию и записать ее в файлы перед ее «развертыванием».
Мы делаем это с помощью xUnit.net для наших автоматических сборок. Мы используем CruiseControl.net
(и пробуем TeamCity). Задача MSBuild, которую мы запускаем для непрерывной интеграции, автоматически меняет номер сборки для нас, поэтому полученный ZIP-файл сборки содержит правильно версированный набор библиотек DLL и EXE.
Наш Файл MSBuild содержит ссылку UsingTask для библиотеки DLL, которая выполняет замену регулярных выражений: (вы можете использовать эту DLL, поскольку она также покрывается лицензией MS-PL)
<UsingTask AssemblyFile = "3rdParty\CodePlex.MSBuildTasks.dll" TaskName = "CodePlex.MSBuildTasks.RegexReplace"/>
Затем мы извлекаем номер сборки, который автоматически предоставляется системой CI. Вы также можете попросить своего поставщика управления версиями предоставить номер исходной версии, если хотите, но мы обнаружили, что номер сборки в системе CI был более полезен, потому что не только можно увидеть результаты интеграции по номеру сборки CI, который также предоставляет ссылка на набор изменений, которые были включены в сборку.
<!-- Cascading attempts to find a build number --> <PropertyGroup Condition = "'$(BuildNumber)' == ''"> <BuildNumber>$(BUILD_NUMBER)</BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$(BuildNumber)' == ''"> <BuildNumber>$(ccnetlabel)</BuildNumber> </PropertyGroup> <PropertyGroup Condition = "'$(BuildNumber)' == ''"> <BuildNumber>0</BuildNumber> </PropertyGroup>
(Мы пробуем BUILD_NUMBER из TeamCity, затем ccnetlabel из CC.net, и если ни один из них не присутствует, мы по умолчанию устанавливаем значение 0, чтобы мы могли протестировать сценарий автоматической сборки вручную.)
Затем у нас есть задача, которая устанавливает номер сборки в файл GlobalAssemblyInfo.cs, который мы связываем со всеми нашими проектами:
<Target Name = "SetVersionNumber"> <RegexReplace Pattern='AssemblyVersion\("(\d+\.\d+\.\d+)\.\d+"\)' Replacement='AssemblyVersion(".$(BuildNumber)")' Files='GlobalAssemblyInfo.cs'/> <Exec Command = "attrib -r xunit.installer\App.manifest"/> </Target>
Это находит атрибут AssemblyVersion и заменяет номер версии a.b.c.d на a.b.c.BuildNumber. Обычно мы оставляем источник отмеченным в дереве с фиксированными первыми тремя частями номера компоновщика и четвертой равной нулю (например, сегодня это 1.0.2.0).
В процессе сборки убедитесь, что задача SetVersionNumber предшествует задаче сборки. В конце мы используем нашу задачу Zip, чтобы заархивировать результаты сборки, чтобы у нас была история двоичных файлов для каждой автоматизированной сборки.
@ Воздушный шар Если вы используете TortoiseSVN, вы можете использовать упакованную программу SubWCRev. Он запрашивает рабочую копию и сообщает вам только самый высокий номер редакции. По общему признанию, это кажется подходом на стороне клиента к проблеме на стороне сервера, но поскольку это хорошая программа командной строки, вы должны иметь возможность довольно легко записывать ее вывод для использования.
Чтобы добавить к ответу @ BradWilson: «Вы также можете попросить своего поставщика системы контроля версий предоставить номер исходной версии, если хотите»
Чтобы подключить Subversion и MSBuild: Проект задач сообщества MSBuild
Если вы используете ASP.Net MVC
(как это делает StackOverflow), я написал простое трехэтапное руководство по автоматическому получению и отображению последней версии SVN. Руководство было вдохновлено моей мыслью об этом самом вопросе! : o)
Звучит здорово, хотя ссылка не работает!
Для нас это было отличным решением для автоматизации отображения управления версиями на основе наших ревизий SVN. Одним из преимуществ является то, что не требуется обращения к вашему серверу SVN.
ссылка не работает или сайт не работает
Спасибо @cacho, исправлено - это была ошибка сервера [sic]; o)
[stackoverflow.com/questions/29802/… [1]: stackoverflow.com/questions/29802/…