Автоматически создавать файл ревизии Subversion - PullRequest
1 голос
/ 14 января 2010

У меня есть проект, структура которого в Subversion выглядит следующим образом:

branch
tags
trunk
-- Library
---- Library Code
-- Website
---- Website Code

Папка Library содержит большую часть кода проекта и является библиотекой классов. Папка Website - это проект сайта, который использует библиотеку. Веб-сайт - это то, что развертывается на живом сайте.

Я хотел бы автоматически создать файл в корне каталога веб-сайта, в котором будет храниться последний номер версии каталога trunk . Возможно ли это, и если да, то как мне поступить?

Сервером Subversion является VisualSVN в Windows, использующий TortoiseSVN с VisualSVN для клиента.

Ответы [ 4 ]

3 голосов
/ 22 января 2010

Поскольку вы используете TortoiseSVN, я предлагаю использовать SubWCRev для этой задачи вместо svnversion.

1 голос
/ 14 января 2010

Ну, обычный способ включения номера ревизии - поставить

$Revision$

где-то в исходном файле, который расширяется при фиксации, при условии, что свойство svn:keywords содержит Revision.

Это даст вам номер ревизии только тогда, когда этот файл был зафиксирован в последний раз, но не текущий HEAD номер ревизии.

В прошлом проекте я использовал небольшой скрипт, который вызывал программу подрывной обработки командной строки, чтобы извлечь текущий номер ревизии. Вы можете позвонить svn info и получить всю информацию обратно, включая номер редакции рабочей копии. Это обновляется для каталога, когда вы выполняете обновление для этого каталога или одного из его родителей, и для файлов, когда они фактически обновляются, поэтому оно может быть не совсем точным. Однако для меня этого было достаточно, так как я все равно обновлял только папку верхнего уровня:

>svn info trunk | findstr /r /c:"^Revision"
Revision: 14466
0 голосов
/ 14 января 2010

Существует инструмент командной строки с именем svnversion , который можно использовать для получения необходимого значения. Однако вам все равно нужно выполнить его вручную. И есть дополнительная проблема:

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

  2. Если вы хотите сохранить результат без изменений, вам придется выполнить его после фиксации. Но тогда он не будет экспортирован.

Так что нет простого ответа на вопрос. Предложение:

  1. Иметь файл version.txt или любой другой с ключевым словом $ Revision $ .
  2. Напишите сценарий перехвата предварительной фиксации , который отклоняет фиксацию, если version.txt не был изменен
  3. При желании напишите клиентский скрипт подключения TortoiseSVN для автоматического изменения файла перед фиксацией.
0 голосов
/ 14 января 2010

Посмотрите на команду svn info. Запуск этого события в качестве проекта до / после сборки даст вам необходимую информацию (и некоторую дополнительную информацию). Затем вам нужно записать номер редакции в файл. ( Если вы сделаете это, убедитесь, что SVN игнорирует этот файл, иначе он войдет в бесконечный цикл изменения файла, вы проверяете его, файл меняется и т. Д ... )

...