показать все теги в git log



почему git log --decorate Не отображать более одного тега на фиксацию?



EDIT: Чарльз Бэйли придумала ответ (по крайней мере в моем случае)

По сути, у меня был один тег, который указывал на другой тег, который указывал на фиксацию. Из-за этого дополнительного уровня косвенности тег не отображался в журнале. Я должен буду исправить это, увядать, исправляя наш сценарий тегов правильно, или с помощью какого-то сценария оболочки voodoo рекурсивно следовать метить. В любом случае, я оставлю этот вопрос только для справки, если кто-то захочет. (Я новичок в переполнении стека, но я предполагаю, что это правильный протокол?)



... Оригинальный вопрос ...



Предыстория: мы используем GIT на работе для управления версиями, и у нас есть политика всегда помечать фиксацию при развертывании. (На самом деле это скрипт, который делает теги, а затем вытаскивает тег на сервере). Поскольку это веб-приложение с отдельным этапом и производством серверы, мы часто помечаем выпуск для постановки (для тестирования или чего-то еще), а затем позже помечаем тот же commit для производства.



так что на самом деле очень часто у нас есть несколько тегов на одном коммите. Было бы очень приятно увидеть это в текстовом журнале, но он, похоже, не поддерживает его. В настоящее время я работаю над проблемой, вручную проверяя тег, который я ищу, или путем запуска gitk. Хотя оба эти решения работают, мне кажется, что это действительно странно ибо git log --decorate для поддержки только одного тега на фиксацию по умолчанию.



Я немного погуглил, но не нашел много. Я упускаю что-то очевидное?



П. С. (Я на самом деле использовать пользовательский формат строку с %d, согласно man-страницам и некоторым быстрым тестам, это эквивалентно --decorate)

451   3  
git

3 ответов:

обратите внимание на тег тега (тегирование тега), который находится в начале вашей проблемы, как Чарльз Бэйли правильно указал в комментарии:

убедитесь, что вы исследование этой теме, поскольку переопределение подписанного тега не так просто:

  • если вы уже отодвинули тега git tag на странице серьезно посоветовал простое git tag -f B заменить имя тега "A"
  • не пытайся воссоздайте подписанный тег с помощью git tag -f (см. извлечение потока ниже)

    (речь идет об угловом случае, но довольно поучительно о тегах в целом, и он исходит от другого участника SO Якуб Narębski):

обратите внимание, что имя тега (heavyweight tag, т. е. объект тега) хранится в двух местах:

  • в самом объекте тега как содержимое заголовка " tag " (вы можете увидеть его в выводе "git show <tag>", а также в выходе "git cat-file -p <tag>", где <tag> тяжеловесный тег, например v1.6.3 на git.git репозиторий),
  • а также по умолчанию имя тега reference (ссылка в "refs/tags/*" пространство имен), указывающее на объект тега.
    Обратите внимание, что тег ссылка (соответствующая ссылка в "refs/tags/*" пространство имен) - это чисто local материя; то, что один репозиторий имеет в 'refs/tags/v0.1.3', другое в 'refs/tags/sub/v0.1.3' для образец.

поэтому, когда вы создаете подписанный тег'A', у вас есть следующая ситуация (предполагая, что она указывает на некоторую фиксацию)

  35805ce   <--- 5b7b4ead  <=== refs/tags/A
  (commit)       tag A
                 (tag)

Пожалуйста, обратите внимание, что "git tag -f A A" (обратите внимание на отсутствие опций, заставляющих его быть аннотированным тегом) - это noop-это не меняет ситуацию.

если вы это сделаете"git tag -f -s A A": обратите внимание, что вы силу owerwriting тег (так git предполагает, что вы знаете, что вы есть делают), и что один из -s/-a/-m параметры используются для принудительного аннотированного тега (создание объекта тега), вы получите следующую ситуацию

  35805ce   <--- 5b7b4ea  <--- ada8ddc  <=== refs/tags/A
  (commit)       tag A         tag A
                 (tag)         (tag)

Обратите также внимание, что"git show A " покажет всю цепочку вплоть до объекта без тега...

git log --no-walk --tags --pretty="%h %d %s" --decorate=full

эта версия также напечатает сообщение фиксации:

 $ git log --no-walk --tags --pretty="%h %d %s" --decorate=full
3713f3f  (tag: refs/tags/1.0.0, tag: refs/tags/0.6.0, refs/remotes/origin/master, refs/heads/master) SP-144/ISP-177: Updating the package.json with 0.6.0 version and the README.md.
00a3762  (tag: refs/tags/0.5.0) ISP-144/ISP-205: Update logger to save files with optional port number if defined/passed: Version 0.5.0
d8db998  (tag: refs/tags/0.4.2) ISP-141/ISP-184/ISP-187: Fixing the bug when loading the app with Gulp and Grunt for 0.4.2
3652484  (tag: refs/tags/0.4.1) ISP-141/ISP-184: Missing the package.json and README.md updates with the 0.4.1 version
c55eee7  (tag: refs/tags/0.4.0) ISP-141/ISP-184/ISP-187: Updating the README.md file with the latest 1.3.0 version.
6963d0b  (tag: refs/tags/0.3.0) ISP-141/ISP-184: Add support for custom serializers: README update
4afdbbe  (tag: refs/tags/0.2.0) ISP-141/ISP-143/ISP-144: Fixing a bug with the creation of the logs
e1513f1  (tag: refs/tags/0.1.0) ISP-141/ISP-143: Betterr refactoring of the Loggers, no dependencies, self-configuration for missing settings.

Примечание:совершить 5e1361c С Брайан м. Карлсон (bk2204) (для git 1.9/2.0 Q1 2014) имеет дело с особым случаем в плане оформления журнала с тегами:

log: правильно обрабатывать украшения с цепными тегами

git log неправильно обрабатывались украшения, когда объект тега ссылался на другой объект тега, который больше не был ref, например, когда второй тег был удален.
Фиксация не будет быть оформлены правильно, потому что parse_object не был вызван на второй тег, и поэтому его поле с тегами не было заполнено, в результате чего ни один из тегов не был связан с соответствующей фиксацией.

вызов parse_object чтобы заполнить это поле, если оно отсутствует, так что цепочка тегов может быть разыменована и фиксация может быть правильно оформлена.
Включите тесты, а также для предотвращения будущих регрессий.

пример:

git tag -a tag1 -m tag1 &&
git tag -a tag2 -m tag2 tag1 &&
git tag -d tag1 &&
git commit --amend -m shorter &&
git log --no-walk --tags --pretty="%H %d" --decorate=full

Comments

    Ничего не найдено.