В git, как узнать, какие файлы были добавлены после определенного тега?

Я поддерживаю базу данных миграции файлов сценариев sql.

Я отмечаю мои коммиты с помощью git tag.

Предположим, у меня есть теги, такие как 1, 1,1, 1,2, 1,3

Я хочу изменить файл (сценарий переноса БД sql), только когда тег не был добавлен в репо после того, как этот файл был создан. Как я могу это выяснить?

Если файл был создан, а затем был добавлен тег (версия), я не хочу изменять этот сценарий миграции SQL, вместо этого я добавлю совершенно новый файл SQL, который поможет мне делать то, что я хочу.

2 ответа

Решение

Вы можете использовать git diff с некоторой интерпретацией следующим образом:

git diff --name-status your-tag..HEAD | grep ^A

Это означает:

"Дай мне разницу между your-tag а также HEAD, показывая имя файла и его статус (добавлено, изменено, удалено, создано). "

Затем grep фильтрует его в добавленные файлы, которые --name-status указывает начало строки с заглавной буквы "А".

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

git describe $(git rev-list --tags --max-count=1)

Затем команда diff выдаст вам список добавленных файлов между двумя коммитами:

git diff --diff-filter=A --name-only $start_commit_id $end_commit_id

Например, в diff-фильтр можно добавить больше опций --diff-filter=AR отобразит список файлов, которые были [A]dded плюс [R]. Теперь, если вы сложите обе команды вместе, вы получите список файлов со времени последнего тега, независимо от того, какой будет последняя метка тега:

git diff --diff-filter=A --name-only $(git describe
     $(git rev-list --tags --max-count=1)) HEAD
Другие вопросы по тегам