Tortoise HG — добавить тег при фиксации

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


person Casebash    schedule 22.12.2010    source источник


Ответы (4)


Нет, потому что тег — это запись в файле .hgtags в корне вашего репозитория, содержащая идентификатор набора изменений и имя тега, а сам этот файл находится под контролем версий. Идентификатор набора изменений неизвестен до тех пор, пока набор изменений не будет создан, поэтому тегирование создает другой набор изменений для проверки в файле .hgtags, записывающем тег для этого набора изменений.

person Mark Tolonen    schedule 22.12.2010

Согласно меркуриальной вики, это невозможно. Как сказал Марк. https://www.mercurial-scm.org/wiki/Tag

Но тогда мне просто интересно. Почему бы mercurial вообще не игнорировать файл .hgtags? точно так же, как он игнорирует папку .hg/. Таким образом, mercurial не будет включать .hgtags каждый раз, когда генерирует идентификатор набора изменений.

Было бы здорово, если бы .hgtags, .hgignores и т. д. находились внутри .hg/

person Aruman    schedule 17.07.2012
comment
Я предполагаю, что причина в том, что вы обычно хотите проверить .hgignores и .hgtags - person steenhulthin; 28.08.2012

С моей точки зрения, система тегов Hg немного запутана, потому что создание тега изменяет историю и требует слияния и фиксации, даже если ни один файл проекта не изменился. Теги могут очень быстро перегрузить график истории.

Я использовал теги SVN, которые были сделаны в отдельной ветке, что имеет то преимущество, что не изменяет историю рабочих веток. Более того, тегировать можно из любой ветки, т.к. Hg берет теги из файлов .hgtags на головы всех веток.

Небольшой скрипт ниже создает ветку "tagged" и помещает в нее теги. Он объединяет текущую ветку в ветку «пометки», поэтому легко увидеть, из чего был сделан тег набора изменений (особенно это позволяет избежать длительных обновлений при переключении ветки).

Вероятно, его можно улучшить, но он удовлетворяет мои потребности.

Я настоятельно рекомендую сделать клон вашего проекта, прежде чем тестировать этот скрипт, на случай, если он будет вести себя не так, как вы ожидаете!

#!/bin/bash

function echo_red()
{
  echo -n -e "\e[01;31m"
  echo -n "$1"
  echo -e "\e[00m"
}
export -f echo_red

# Display the help and exit
function show_help {
    echo "Usage: $0 [hg_tag_options ...]"
    echo "    tags a version (current if not specified) in the 'tagging' branch."
    echo "    Options are the 'hg tag' ones, plus"
    echo "        -?, -h, --help  Show (this) help"
    exit 1
}

#  Parse the command-line arguments
function parse_args {
    for arg in "${commandline_args[@]}"
    do
        case "$arg" in #(
            '-?' | -h | --help )
                                show_help
                                ;;
        esac
    done
}

commandline_args=("$@") 
if [ "$commandline_args" = "" ]
then
    show_help
fi
parse_args

VER=`hg id | sed 's#\([0-9a-z]*\).*#\1#g'`
BRANCH=`hg branch`

# Check for clean directory
TEST=`hg st -S -q`
if [ "$TEST" != "" ]
then
    echo_red "Directory contains unresolved files !"
    exit 1
fi

hg update --check >/dev/null
if [ $? -ne 0 ]
then
    echo_red "Directory contains unresolved files !"
    exit 1
fi

# Switch to tagging branch
hg update tagging >/dev/null
if [ $? -ne 0 ]
then
    echo "Creating new 'tagging' branch."
    hg update default >/dev/null
    hg branch tagging
fi

# Merge if changes detected
TEST=`hg diff -r $VER -X .hgtags --stat`
if [ "$TEST" != "" ]
then
    #take only the 'tagging' version of hgtags
    cp .hgtags .hgtags.bak
    hg merge -r $VER --tool internal:other >/dev/null
    rm .hgtags
    mv .hgtags.bak .hgtags
    hg commit -m Merged
fi

# Tag and Switch back to original
hg tag -r $VER $@
hg update $BRANCH >/dev/null
hg update $VER >/dev/null

Пример использования:

hg_tag.sh [-f] [-l] [-m TEXT] [-d DATE] [-u USER] [-r REV] test_v1_5
person eheurtel    schedule 15.02.2012

Не уверен, что это то, что вы ищете, но вы можете переместить тег в другой набор изменений.

hg com -m "moving tag to this changeset"
hg tag 0.1 -f
hg push
person aubreypwd    schedule 23.07.2012