Git tag действительно (refs / tag) [duplicate]

Вы можете использовать строку пользовательского формата:

  DateTime d = DateTime.Now;  string dateString = d.ToString ("yyyyMMddHHmmss");   

Замените «hh» для «HH», если вы не хотите 24-часового времени.

18
задан artkoenig 17 January 2013 в 23:20
поделиться

3 ответа

Я столкнулся с тем же вопросом несколько минут назад. Ни один из уже представленных ответов не касался реальной проблемы, которая избавляется от сообщения warning: tag 'foo' is really 'bar' here и дает git describe просто перечислить новое имя тега. Это особенно важно в моем случае, поскольку моя система сборки использует git describe для записи в сборку, какие источники использовались для создания сборки.

Репликация проблемы

Я могу реплицировать проблема:

$ git tag foo --annotate -m"original message"
$ git tag bar foo
$ git tag -d foo
$ git describe 
warning: tag 'foo' is really 'bar' here
foo

(Флаг --annotate выше избыточен, поскольку -m подразумевает --annotate, но я включил его для выделения.) Я попытался воспроизвести проблема с легким тегом, но не была в состоянии сделать это. Чтобы реплицировать проблему, необходима аннотация.

Фиксация проблемы

Некоторые из них включают в себя толкание предметов, которые уже подтолкнули, но я нахожусь в согласии с Дэвидом Калпом, когда он говорит :

Однако иногда бывает просто не стоит долговременной боли неточной (грязной) истории, а кратковременная боль

Как только вы застряли с warning: tag 'foo' is really 'bar' here, вы должны сделать:

$ git tag bar bar -m"original message" --force
$ git describe 
bar

При необходимости адаптироваться, если сообщение необходимо изменить.

Чтобы удалить старый тег, если он уже был нажат:

$ git push origin :refs/tags/foo

Чтобы обновить новый тег, если он уже был нажат:

$ git push origin refs/tags/bar

Избежать проблемы

Чтобы избежать проблемы, в первую очередь вам нужно создать bar с помощью:

$ git tag bar foo -m"original message"
22
ответ дан Community 15 August 2018 в 17:22
поделиться
  • 1
    Большое спасибо за ответ. Прекрасно работает! Этот ответ должен быть принят, поскольку он единственный, который решает (!) Исходную задачу. – Denis 14 January 2015 в 17:49
  • 2
    Если вы сделаете git tag bar bar -m"original message" --force, вы можете просто сделать git push --force origin refs/tags/bar после этого, нет необходимости удалять. Фактически удаление удалит ваш обновленный тег, и вы больше не сможете его вытолкнуть. – jmiserez 29 December 2016 в 11:06
  • 3
    Но это изменит дату обновленного тега, верно? – user2340939 2 June 2018 в 14:13
  • 4
    Стоит отметить: сообщение tag '%s' is really '%s' here" выходит из git describe и применяется только к аннотированным тегам, поэтому вы должны начать с аннотированного тега, чтобы воспроизвести проблему. Это связано с внутренней реализацией: аннотированный тег фактически представляет собой пару сущностей, которые должны совпадать, и использование git tag <new-name> <existing-annotated-tag> создает один новый несогласованный объект (легкий тег name ) для существующего аннотированного тег object , который вставляет старое имя. – torek 8 August 2018 в 15:16
  • 5
    Это, в свою очередь, поэтому вы должны создать новую пару (новый легкий тег с именем X, указывающий на аннотированный тег имени X). Основной аннотированный объект с именем X может указывать либо прямо на тот же объект фиксации, что и оригинальный аннотированный тег, либо на исходный объект аннотированного тега. Чтобы указать прямо на базовый объект, а не на старый тег, используйте git tag bar foo^{} -m "...": суффикс ^{} означает «разрешить тег для базового объекта». – torek 8 August 2018 в 15:19

Повторить стандартную осторожность, когда кто-то предлагает переписывать историю (или в этом случае историю перезаписи), - если вы можете избежать этого, не делайте этого.

Однако, не стоит долговременной боли в неточной (беспорядочной) истории, и краткосрочная боль стоит того.

Если это так, в следующей статье приведены необходимые шаги: Как переименовать тег уже нажат на удаленный git Repo .

Основные шаги:

git tag new_tag old_tag
git push --tags
git push origin :refs/tags/old_tag
git tag -d old_tag
3
ответ дан David Culp 15 August 2018 в 17:22
поделиться
  • 1
    Является ли здесь способ удаления "1.0" тег полностью из истории git в моем случае? – artkoenig 19 January 2013 в 17:01

Нет, я не думаю, что это правильный рабочий процесс для тегов в git.

. Основное правило git: не смешивайте с чем-то, что вы уже нажали.

Поскольку вы уже нажали на тег 1.0, вы не хотите переименовывать его в 1.5 локально, а затем пытаетесь его вытолкнуть. Оставьте тэг 1.0 для потомков, создайте новый тег 1.5 и нажмите его тоже. И действительно - для чего нужны теги. Таким образом, вы можете вернуться через 6 месяцев и воссоздать то, что ваше программное обеспечение было похоже на версию 1.0.

-3
ответ дан Mike Monkiewicz 15 August 2018 в 17:22
поделиться
  • 1
    Ну, начальная фиксация была помечена как «1.0». но на самом деле он должен быть помечен как «1,5». Поэтому моя попытка переименовать его. – artkoenig 17 January 2013 в 18:08
  • 2
    Хотя это, как правило, хорошее эмпирическое правило, нет причин, по которым вы не должны делать то, что он пытался сделать, пока никто не вытащил – taxilian 27 May 2014 в 18:24
Другие вопросы по тегам:

Похожие вопросы: