Единственное, что я могу придумать, чтобы сделать это за один проход, - это использовать фильтр фиксации. Как и фильтр сообщений, он принимает сообщение журнала на stdin, поэтому вы сможете проанализировать его и выяснить, что вам нужно. Затем вы можете сами установить соответствующие переменные и сами вызвать git commit-tree
. (Фильтр фиксации, по сути, является заменой дерева коммитов, принимая те же аргументы и выводя одинаковый результат.)
В bash это будет примерно так:
message=$(read_from_stdin)
modify_env_vars "$message"
echo "$message" | git commit-tree "$@"
Я никогда не пробовал этого, но я не понимаю, почему это не сработает, если вы напишите эти две функции оболочки правильно!
(И просто небольшая заметка - это не так уж и то, что --env-filter
и --msg-filter
не могут влиять друг на друга, это то, что они всегда работают в таком порядке. Итак, первый фильтр может оставить позади эффекты в файлах или окружении, чтобы другие могли их видеть, но они находятся в том порядке, который мешает вам делать то, что вы хотите.)