Tortoise HG - 在提交时添加标签

时间:2010-12-22 03:18:49

标签: mercurial tortoisehg

目前,我只知道如何在提交后添加标记。这意味着获得仅包含标记的第二个提交。是否可以在提交时添加标记?

4 个答案:

答案 0 :(得分:37)

不,因为标记是包含变更集ID和标记名称的存储库根目录的.hgtags文件中的条目,并且此文件本身受版本控制。在创建变更集之前,不知道变更集ID,因此标记会创建另一个变更集,以检查记录该变更集标记的.hgtags文件。

答案 1 :(得分:4)

根据mercurial wiki,这是不可能的。就像马克说的那样。 https://www.mercurial-scm.org/wiki/Tag

然而,我只是想知道。为什么mercurial完全无视.hgtags文件?就像它忽略了.hg /文件夹。 因此,每当它生成变更集ID时,mercurial都不会包含.hgtags。

如果.hgtags,.hgignores等位于里面会很棒.hg /

答案 2 :(得分:3)

就我而言,Hg标记系统有点乱,因为创建标记会更改历史记录,即使没有项目文件发生更改也需要合并和提交。标记会很快给历史图带来负担。

我使用的SVN标记是在一个单独的分支上完成的,它具有不改变工作分支历史的优点。此外,标记可以从任何分支完成,因为Hg从所有分支的头部的.hgtags文件中获取标记。

下面的小脚本创建了一个分支“标记”并将标记放入其中。它将当前分支合并到“标记”分支中,因此很容易看到变换集标记已完成(它特别避免了切换分支时的长刷新)。

它可能会有所改进,但它符合我的需要。

我强烈建议在测试此脚本之前复制您的项目,以防它的行为不符合您的预期!

#!/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

答案 3 :(得分:0)

不确定这是否是您要找的,但您可以将标记移动到其他变更集。

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