Подтвердить что ты не робот

Tortoise HG - добавление тега при фиксации

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

4b9b3361

Ответ 1

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

Ответ 2

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

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

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

Ответ 3

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

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

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

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

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

#!/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=("[email protected]") 
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 [email protected]
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

Ответ 4

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

hg com -m "moving tag to this changeset"
hg tag 0.1 -f
hg push