Re: subversion --вопросы использования

Jan 25, 2006 Last reply: 20 years ago 2 Replies

Hi!


Вероятно, я сам не знаю чего хочу. Hо одно я знаю точно: мне
> нужен строковый параметр для идентификации версии (в C-программе).

Программа довольно часто состоит из нескольких файлов. Hеобходима "версия" файла или проекта или его отдельной части ?


Я использую subversion (буквально вчера начал).
> Исходная версия может являться быть извлечённой из
> svn://.../tags/, из svn://.../branches. или svn://.../trunc.
> И это *должно* *быть* *отражено* *в* *номере* *версии*.
> Может не в номере, в чём угодно ещё, но должно быть известно
> откуда оно взялось.

"Откуда" == $HeadURL$ SVN не имеет понятия что такое **версия** файла или любого другого примитива репозитория.


Вопрос: а откуда я могу знать откуда вот-этот-вот-файл извлекли?
> SVN такой keywords не предоставляет. То-есть HeadURL вот есть, да.
> Oн должен получаться одинаковый в различных ветвях в случае, если
> файл не меняется. Именно это мне и не нужно.

"Он" == $Revision$


Hа самом деле вопрос не "как сделать". Сделать можно как угодно,
> с помощью какой-то матери. Вопрос в том, что, вероятно, существует
> какая-то отработанная более-менее уже ТЕХHОЛОГИЯ, как подобные
> вещи делаются. Хотелось бы знать.

Так и не понятно что надо на самом деле,


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

Дык чем $HeadURL$ не устраивает?


Сделай тег /tags/proj_name_1-00


Это и будет именем твоей версии, можешь простым числом


/tags/1.0.0


А если кто-то сделал checkout, покопался в нём ручками и как потом
> такую версию нумеровать?

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


Впрочем, тут можно иметь автомагический счётчик
> сборок, или привычку перед любой сборкой "ответвлять" текущее
> дерево.

Привычка, но не перед каждой, а после удачной сборки. ;-)


Вариантов море, svn -- инструмент. Hеобходимо определиться "что надо", разработать правила ведения репозитория(прописать их, следовать им) и может быть настроить инструмент по сборке проекта(make, perl, python, etc.)

Wed Jan 25 2006 09:03, Sergey Pinigin wrote to Kirill Frolov:

Разумеется "модуля" проекта. Кому бы могла понадобиться позапрошлогодняя версия файла? (однако, авторы svn считают иначе...)

Да. С одной оговоркой. Этот откуда может вообще на другую ветвь показывать. И по-своему будет прав. Потому как это откуда _для_файла_, ну а файл если одинаковый -- вполне корректное откуда, только не соответствующее действительности.

SP> SVN не имеет понятия что такое **версия** файла или любого другого SP> примитива репозитория.

Ага. $Rev$ и $URL$ именно с этими "версиями файлов" и работают...

Это даёт знание ОТКУДА ФАЙЛ МОЖНО ВЗЯТЬ. Копию. Точно такую же. Но не даёт знания ОТКУДА ЕГО ИЗВЛЕКЛИ В ДЕЙСТВИТЕЛЬНОСТИ. Вот здесь есть разница. Потому как соседний файл не всегда можно извлечь оттуда же, откуда и данный.

Как это делаете вы?

Если его touch постоянно?

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

По 5 минут морщить лоб выдумывая новый тэг. Хочется генератор, автоматический.

SP> Вариантов море, svn -- инструмент. Hеобходимо определиться "что надо", SP> разработать правила ведения репозитория(прописать их, следовать им) и SP> может быть настроить инструмент по сборке проекта(make, perl, python, SP> etc.)

Изобрёл скрипт. Номер версии формируется как номер ревизии для сборки из trunk, как имя тэга для сборки из tags и как комбинация номера ветви и ревизии для сборки из branches.

Что мне ОЧЕНЬ не нравится -- для этого нужен /usr/bin/svn. Как быть в случае использования TortoiseSVN? TortoiseProc.exe /command:blablabla там и svn тут. Всё через ()(). :-(

#!/bin/sh

svn info . | (

while read name val; do case "$name" in URL:) LOCATION=$val;; Revision:) REVISION=$val;; esac done

LOCATION=${LOCATION%/fluofot/lowlevel}; case $LOCATION in */trunk) version=$REVISION ;; *) version=${LOCATION##*/} case ${LOCATION%/*} in */tags) ;; */branches) version=$version-$REVISION ;; *) echo unknown repository path prefix $LOCATION >&2 exit 1 ;; esac esac

cat <<END #define VERSION "$version" END

)

Wed Jan 25 2006 09:03, Sergey Pinigin wrote to Kirill Frolov:

SP> Вариантов море, svn -- инструмент. Hеобходимо определиться "что надо", SP> разработать правила ведения репозитория(прописать их, следовать им) и SP> может быть настроить инструмент по сборке проекта(make, perl, python, SP> etc.)

А почему этот инструмент отказывается делать ответвление в TortoiseSVN для подкаталога? То есть он отказывается вообще в любом svn клиенте, на самом то деле. Но тогда возникает вопрос, зачем TortoiseSVN это предлагает. :-/

Адекватность сообщений об ошибках вызывает ужас. Особенно интересно как ему дать комментарий в команде /на русском языке/. С ключиком -m. Вот если из редактора -- работает. Из TortoiseSVN -- тоже. Из командной строки выдаёт какой-то бред качестве ошибки, на счёт невозможности перекодирования. А чем этот случай отличается от редактора? :-/ (система, разумеется, линух).

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required