Чтобы автоматически делать вещи git
, используйте крючки
Вы хотите делать \thing{}
с каждым git commit? Вот для чего нужен крючок . Например,post-commit
крючок:
После завершения всего процесса фиксации запускается ловушка post-commit. Он не принимает никаких параметров, но вы можете легко получить последний коммит, запустив его
git log -1 HEAD
. Обычно этот скрипт используется для уведомления или чего-то подобного.
с сайта GIT SCM / руководство
Добавление даты с каждым git commit
Это простая часть. Вы можете использовать этот хук для достижения первой части ваших двух целей довольно просто:
- используйте
git diff-tree --no-commit-id --name-only -r HEAD
для получения файлов, измененных в текущей ревизии (см. это объяснение на SO ) - переберите эти файлы на выбранном вами языке и используйте инструмент по вашему выбору, чтобы вставить дату, например, с помощью
sed
илиawk
Если вы сделаете это локально, в вашей рабочей копии останутся измененные неотмеченные файлы; т.е.git status
покажет измененные файлы . Вы можете избежать этого, используя дополнительный репо, как показано ниже.
Добавление версии с каждым git tag
Это немного сложнее.
Вы можете обойти тот факт, что git tag
никакие хуки не запускаются, используя промежуточное репозиторий git - локальное или удаленное - и git push
к этому репо каждый раз, когда вы ставите теги. Вы могли бы тогда использоватьpost-update
перехват на этом сервере для перезаписи на основе последней метки.
Например:
- Получить последнее название тега / версии:
git describe --tags $(git rev-list --tags --max-count=1)
- Отформатируйте файлы, используя
sed
(илиawk
или любой другой инструмент, который вы выберете) - Загрузить в CTAN из этого каталога
Разве я не могу сделать это с другим крючком?
Это является возможным обнаружить, если ссылка имеет тег, используя git describe
, например:
# In a working git repo $ git tag -a "test1" -m "test tag" $ git describe --exact-match HEAD test1 $ git describe --exact-match HEAD^1 fatal: no tag exactly matches 'f8a1d888151809ccfbb3460bbcf310541967e292' 128
Однако использование git tag
не вызовет commit
зацепку.