пост коммит хук для обновления файла под версией - PullRequest
8 голосов
/ 16 марта 2009

Я создал файл с именем version.ini, который находится под контролем версий (/trunk/version.ini) Теперь я хотел сделать зацепку после коммита, чтобы обновить этот файл до последней версии. Но я не знаю, какая команда может это сделать. Я знаю, у меня есть эти параметры:

#!/bin/sh

REPOS = "$1"
REV = "$2" 

Но как я могу заменить содержимое этого файла, не делая новую ревизию? и все еще есть эти изменения в моем репо?

UPDATE: Так как, возможно, я не был ясно, я попробую более подробное объяснение: Допустим, у меня есть этот репозиторий: / svn / repos / project / trunk /, и в нем у меня есть файл с именем version.ini, который находится под контролем версий. Что я хочу сделать, так это чтобы при каждом коммите обновлялся этот файл до новой ревизии Допустим, текущая версия 263, я хочу, чтобы в этом файле было записано 263. И чтобы ответить на ответ ниже, вы не можете использовать ключевые слова, так как они работают, только если я обновляю этот файл и не хочу этого делать.

Надеюсь, я понял, и спасибо за любую помощь. Приветствия

Ответы [ 2 ]

7 голосов
/ 17 марта 2009

То, что вы на самом деле хотите, это не способ изменить ваши коммиты, а что-то вроде svn: Keywords . К сожалению, как вы можете прочитать в окне "Где $ GlobalRev $?" это на самом деле не делает то, что вы хотите. Вместо этого вам придется написать скрипт для вызова и анализа выходных данных svnversion и каким-то образом поместить результат в ваши файлы как часть сборки.

Теперь, чтобы ответить на ваш буквальный вопрос, все еще интересно подумать о том, что вы можете и не можете делать в скриптах svn hook:

Вы не можете изменить коммит из ловушки после фиксации

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

Вы также не можете изменять ожидающие коммиты из ловушки перед фиксацией

Вы можете просмотреть содержимое ожидающей транзакции из ловушки перед фиксацией, используя инструмент svnlook с переключателем --transaction, но вы не можете его изменить.

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

5 голосов
/ 16 марта 2009

Невозможно что-либо изменить в репо без изменения номера ревизии.

Решение состоит в том, чтобы поместить в файл специальные ключевые слова (поиск по svn:keywords) и заменить их SVN во время оформления заказа. Может показаться, что эти значения получены из хранилища, но представление файла в хранилище не изменится.

Возможно, вы ищете $ LastChangedRevision $ (или сокращенно $ Rev $).

Другое решение состоит в том, чтобы добавить правило в ваш инструмент сборки / Makefile / все, что использует svn info в корневом каталоге вашего проекта, чтобы определить текущую версию и поместить ее во временный файл (который не *) 1012 * добавлено в репо).

...