Хук Git pre-commit работает как post-commit

Название в значительной степени говорит само за себя.

В локальном репо у меня есть папка .git, содержащая мои хуки. Я использую свой собственный исходный код Lua, чтобы записать текущую версию в файл внутри себя. Затем в хуке перед фиксацией у меня есть:

#!/bin/sh
#
# An example hook script to verify what is about to be committed.
# Called by "git commit" with no arguments.  The hook should
# exit with non-zero status after issuing an appropriate message if
# it wants to stop the commit.
#
# To enable this hook, rename this file to "pre-commit".

echo "START" >> E:/Desktop/tmp.txt

exec $LUA_HOME\\lua.exe ${PWD}\\hooks\\pre-commit.lua "${PWD}/lua/autorun/trackassembly_init.lua" "Rev." > E:/Desktop/tmp.txt

У меня есть два файла. В первом я делаю фактические изменения (исходный файл). Второй я использую для записи текущей версии (файл версии).

Всякий раз, когда я использую TortoiseGit и делаю:

1) Modify the source file
2) Repo Directory --> Right Click --> Git Commit "master"

Информация об исходном файле добавляется в индексы, но нет следов измененного файла версии с новой версией внутри него. Это приводит к разнице между рабочей копией и файлом версии, и TortoiseGit помещает (!) в каталог.

Согласно руководству:

Хук предварительной фиксации запускается первым, еще до того, как вы наберете сообщение о коммите. Он используется для проверки моментального снимка, который должен быть зафиксирован, чтобы увидеть, не забыли ли вы что-то, чтобы убедиться, что тесты выполняются, или для проверки того, что вам нужно проверить в коде. Выход из этого хука, отличный от нуля, прерывает фиксацию


person Деян Добромиров    schedule 24.09.2015    source источник


Ответы (1)


В git вы сначала вносите изменение (git add), затем вы его фиксируете (git commit) (а затем вы нажимаете его, но здесь это не важно). Хук post-commit запускается после коммита; если вы измените рабочую копию в это время, это не повлияет на промежуточные изменения.

person choroba    schedule 24.09.2015
comment
Как тогда мне вставить свою версию? Это работает, когда я настраиваю TortoiseGit для использования чего-то, что называется хуком start-commit. Это помогает, но IDK доступен в каталоге .git/hooks, я думаю, что ... нет, после помещения туда файла с именем start-commit он даже не нашел его. - person Деян Добромиров; 24.09.2015
comment
@ДеянДобромиров: Просто git add измененный файл после изменения хука. - person choroba; 24.09.2015
comment
Запустил git add ${PWD}/lua/autorun/trackassembly_init.lua до и после изменения файла версии, и никаких эффектов не было. - person Деян Добромиров; 24.09.2015
comment
@ДеянДобромиров: Странно. Я пробовал с git add file после изменения, и у меня это сработало. - person choroba; 24.09.2015
comment
Также нет опции «Добавить» в контекстном меню измененного файла в TortoiseGit. Какой клиент вы используете? - person Деян Добромиров; 24.09.2015
comment
Пробовал с 'git add ${PWD}\\lua\\autorun\\trackassembly_init.lua git commit --amend --no-edit ' - person Деян Добромиров; 24.09.2015
comment
@ДеянДобромиров: я использую командную строку git, которая поставляется с linux или cygwin. - person choroba; 24.09.2015
comment
О, это так, тогда неважно, просто использовал мой старый метод, вместо этого он работает как шарм с файлом *.bat под окнами - person Деян Добромиров; 25.09.2015