Pregunta Tortoise HG - Agregar una etiqueta en commit


Por el momento, solo sé cómo agregar una etiqueta después de una confirmación. Esto significa que debes obtener un segundo compromiso que solo contenga la etiqueta. ¿Es posible agregar una etiqueta en commit?


32
2017-12-22 03:18


origen


Respuestas:


No, porque una etiqueta es una entrada en el .hgtags archivo en la raíz de su repositorio que contiene la ID del conjunto de cambios y el nombre de la etiqueta, y este archivo está bajo control de revisión. El ID del conjunto de cambios no se conoce hasta que se crea el conjunto de cambios, por lo que el etiquetado crea otro conjunto de cambios para verificar en el .hgtags archivo que registra la etiqueta para ese conjunto de cambios.


37
2017-12-22 03:59



De acuerdo con la wiki mercurial, es imposible. Justo como dijo Mark. https://www.mercurial-scm.org/wiki/Tag

Pero luego, solo me pregunto. ¿Por qué no mercurial ignorando el archivo .hgtags por completo? al igual que ignora .hg / carpeta. Entonces mercurial no incluirá .hgtags cada vez que genere un ID de conjunto de cambios.

Sería genial si .hgtags, .hgignores, etc. está dentro de .hg /


4
2017-07-17 09:00



Para mi punto de vista, el sistema de etiquetado de Hg es un poco desordenado porque la creación de una etiqueta cambia el historial y necesita fusionarse y comprometerse incluso si no ha cambiado el archivo de proyecto. El etiquetado puede sobrecargar un gráfico de historial muy rápidamente.

Me usaron para el etiquetado de SVN, que se realizó en una rama separada, que tiene la ventaja de no cambiar el historial de la sucursal en funcionamiento. Además, el etiquetado se puede realizar desde cualquier rama, porque Hg toma las etiquetas de los archivos .hgtags en las cabeceras de todas las ramas.

El pequeño script a continuación crea una rama "etiquetado" y pone etiquetas en él. Combina la rama actual en la rama de "etiquetado", por lo que es fácil ver que se haya realizado la etiqueta del conjunto de cambios (especialmente evita las actualizaciones prolongadas al cambiar de rama).

Probablemente se puede mejorar, pero se adapta a mis necesidades.

Recomiendo hacer un clon de su proyecto antes de probar este script, en caso de que no se comporte como esperaba.

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

Ejemplo de uso:

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

3
2018-02-15 14:45



No estoy seguro de si esto es lo que está buscando, pero puede mover la etiqueta a un conjunto de cambios diferente.

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

0
2017-07-23 07:07