Изменение файла перед фиксацией Subversion - PullRequest
2 голосов
/ 01 апреля 2009

Я использую TortoiseSVN для Windows и хочу выяснить, могу ли я установить какой-то макрос для изменения одного из файлов в репозитории при фиксации.

В моем хранилище subversion у меня есть XML-файл с именем "Web.Config". В этом документе XML есть несколько узлов с именем тега «add», которое представляет «Номер сборки», «Описание сборки» и «Дата последней сборки» в XML-пути / Configuration / appSettings. Этот XML-файл использует атрибут «key» на узле «add», чтобы определить, какие из этих настроек устанавливаются.

Вышеупомянутые узлы меняются вручную перед каждым коммитом (предположительно, но я не всегда так делаю).

Мой вопрос: Можно ли изменить эти настройки в файле при фиксации?

Ответы [ 4 ]

2 голосов
/ 01 апреля 2009

Подумайте об использовании subwcrev.exe для вставки номера сборки (ревизии) в ваш файл web.config после фиксации. Вот как это обычно делается в моем опыте (вместо того, чтобы делать это перед фиксацией) - просто добавьте subwcrev в качестве шага сборки, шага после сборки или части шага «публикации».

Как я заметил в комментарии выше, я не уверен, что использование ловушки перед фиксацией является хорошей идеей для этого, поскольку это будет означать, что ваши локальные файлы мгновенно устаревают в момент, когда вы фиксируете ,

1 голос
/ 01 апреля 2009

Вероятно, вы можете использовать скрипт pre-commit hook. Хуки Pre-commit позволяют вам выполнять скрипты прямо перед тем, как сервер фиксирует ваши изменения. Хорошая статья о настройке сценария ловушки перед фиксацией: здесь

0 голосов
/ 01 апреля 2009

Возможно, вы могли бы найти другую систему, которая не требует изменения таких файлов.

Кроме того, я подозреваю, что у вас есть развертываемые компоненты, не относящиеся к источникам и не зависящие от них, предназначенные для контроля версий. Я бы включил только исходный код для ваших проектов, а также сторонние сборки, на которые ссылаются ваши проекты в системе контроля версий. Я бы проигнорировал каталоги \bin и \obj ваших проектов.

Каждый должен иметь возможность извлекать самую последнюю (или любую другую версию) из системы контроля версий, устанавливать внешние факторы для своей среды (создавать базу данных, устанавливать разрешения и т. Д.), Выполнять сценарии сборки проектов и иметь полнофункциональное приложение.

Но хранить последние файлы .dll или .msi в системе управления версиями напрямую не обязательно для полноценного проекта и, возможно, не очень хорошая идея.

0 голосов
/ 01 апреля 2009

Может быть, использовать svn pre-commit hooks?

Другой вариант (тот, который я бы предпочел и использовал) - поместить эти данные в вашу веб-сборку во время сборки, а затем программно прочитать ее в своем коде. Если вы используете .NET, то есть:)

  1. Добавьте шаг в вашу сборку для генерации общего AssemblyInfo.cs. (см. [http://blog.darrenstokes.com/2007/12/17/ease-versioning-multiple-assemblies-by-splitting-up-assemblyinfo/]) 1
  2. «Добавить как ссылку» этот файл для каждого из ваших проектов
  3. Когда вам нужна эта информация, вы можете получить ее из Reflection, например:

    System.Diagnostics.FileVersionInfo version = System.Diagnostics.FileVersionInfo.GetVersionInfo
    (System.Reflection.Assembly.GetExecutingAssembly () .Location);

    Console.Out.WriteLine («MyApplication v {0} by Me», version.FileVersion);

...