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