Pertanyaan Tortoise HG - Tambahkan tag saat komit


Saat ini, saya hanya tahu cara menambahkan tag setelah komit. Ini berarti bahwa mendapatkan komitmen kedua yang hanya berisi tag. Apakah mungkin untuk menambahkan tag pada commit?


32
2017-12-22 03:18


asal


Jawaban:


Tidak, karena tag adalah entri di .hgtags file di root repositori Anda yang berisi id changeset dan nama tag, dan file ini sendiri berada di bawah kontrol revisi. ID changeset tidak diketahui hingga changeset dibuat, jadi penandaan membuat changeset lain untuk check in .hgtags file yang merekam tag untuk changeset itu.


37
2017-12-22 03:59



Menurut wiki lincah, tidak mungkin. Sama seperti kata Mark. https://www.mercurial-scm.org/wiki/Tag

Tapi kemudian, aku hanya bertanya-tanya. Mengapa tidak lalai mengabaikan file .hgtags sama sekali? seperti itu mengabaikan .hg / folder. Sangat berangin tidak akan menyertakan .hgtags setiap kali menghasilkan ID perubahan.

Akan lebih bagus lagi jika .hgtags, .hgignores, dll berada di dalam .hg /


4
2017-07-17 09:00



Untuk pandangan saya, sistem penandaan Hg agak berantakan karena membuat tag mengubah sejarah dan perlu menggabungkan dan melakukan bahkan jika tidak ada file proyek yang berubah. Pemberian tag dapat membebani grafik riwayat dengan sangat cepat.

Saya telah menggunakan penandaan SVN yang dilakukan pada cabang terpisah, yang memiliki keuntungan untuk tidak mengubah riwayat cabang yang berfungsi. Selain itu, penandaan dapat dilakukan dari cabang mana saja, karena Hg mengambil tag dari file .hgtags di kepala semua cabang.

Skrip kecil di bawah ini membuat "pemberian tag" cabang dan menempatkan tag di dalamnya. Ini menggabungkan cabang saat ini di cabang "tagging", sehingga sangat mudah untuk melihat tag changeset dilakukan dari (itu terutama menghindari refresh lama ketika beralih cabang).

Itu mungkin bisa diperbaiki, tapi itu sesuai dengan kebutuhan saya.

Saya sangat menyarankan membuat tiruan proyek Anda sebelum menguji skrip ini, jika tidak berfungsi seperti yang Anda harapkan!

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

Contoh Penggunaan:

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

3
2018-02-15 14:45



Tidak yakin apakah ini yang Anda cari, tetapi Anda dapat memindahkan tag ke perubahan yang berbeda.

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

0
2017-07-23 07:07