Git diff между последним и предыдущим тегом

Я хочу сделать различие, как этот.

Единственное отличие состоит в том, что я не хочу сообщать имена тегов "вручную", я хочу, чтобы они были получены командами git.

я знаю это git describe --tags возвращает мой последний тег Но как насчет предыдущего? Как получить его?

В основном то, что я хочу, это:

$ git diff $(git_command_to_get_previous_tag) $(git describe --tags)

И что я не хочу:

$ git diff 1.0 2.0

2 ответа

Решение

Вы можете получить последний тег, используя:

git tag --sort version:refname | tail -n 1

И предыдущий тег с помощью:

git tag --sort version:refname | tail -n 2 | head -n 1

Собрав все вместе, вы можете получить разницу, используя это:

git diff $(git tag --sort version:refname | tail -n 2 | head -n 1) $(git tag --sort version:refname | tail -n 1)

Мне нужно было сделать то же самое, но с PowerShell вместо Bash. Хотя общий метод тот же.

Получить все теги, если есть новые:

git fetch --all --tags

Получите последний тег, используя:

git tag -l --sort=-version:refname | select -first 1

Получите предыдущий тег, используя:

git tag -l --sort=-version:refname | select -first 2 | select -last 1

Соедините это:

git diff $(git tag -l --sort=-version:refname | select -first 1) $(git tag -l --sort=-version:refname | select -first 2 | select -last 1)

Мой фактический пример использования:

git fetch --all --tags > $null; git diff tags/$(git tag -l --sort=-version:refname v* | select -first 1) tags/$(git tag -l --sort=-version:refname v* | select -first 2 | select -last 1) --name-only | Select-String -Pattern ".*\.xml" | Write-Host

Это позволит получить все удаленные теги в случае появления новых, перенаправить вывод на $null, чтобы он не отображался, получить список файлов, измененных между самыми последними тегами, начинающимися с v, затем отфильтруйте список файлов, чтобы возвращались только те, которые заканчиваются на .xml

Другие вопросы по тегам