Чтобы автоматически делать что-то с git
, используйте hooks
Вы хотите делать \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
.