2009-03-16 9 views
8

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

#!/bin/sh 

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

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

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

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

+0

Вопрос не ясен. Крючки могут делать что-то серверное. Обновление файла в репозитории - это действие от клиента к серверу. –

ответ

7

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

Теперь, чтобы ответить на ваш буквальный вопрос, по-прежнему весело думать о том, что вы можете и не можете сделать в SVN крючков скриптов:

Вы не можете изменить коммите из поста-фиксация

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

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

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

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

5

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

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

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

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

+0

не собирается работать ... так как мне нужно изменить этот файл, чтобы заменить ключевые слова. –

+0

SVN сделает это для вас, когда svn: ключевые слова установлены правильно. –

+0

Это похоже на фильтр, который позволяет вам видеть вещи в репозитории, которых на самом деле нет. –

 Смежные вопросы

  • Нет связанных вопросов^_^