Git Pre-Commit Hook, добавляющий файл после фиксации

Я пытаюсь создать дамп базы данных mysql и добавить файл дампа .sql в промежуточную область, используя перехватчик предварительной фиксации, чтобы затем его можно было включить в фиксацию (в Windows Server 2012 R2/IIS). Следующий код хорошо выгружает базу данных, но после фиксации он по-прежнему показывает файл be.sql в промежуточной области... иногда (?) - кажется, файл добавляется в промежуточную подготовку ПОСЛЕ фиксации (?). Это хук перед фиксацией, поэтому я понятия не имею, почему он может добавлять файл после того, как происходит фиксация:

#!/bin/bash

# Dump Database
/c/Program\ Files\ \(x86\)/MySQL/MySQL\ Server\ 5\.7/bin/mysqldump.exe -u root --skip-extended-insert be > /c/inetpub/wwwroot/directory/be/be.sql

# Add Database
cd /c/inetpub/wwwroot/directory/be
git add be.sql

Поведение немного странное — я увижу, что be.sql все еще находится в промежуточной области, поэтому я сделаю коммит. Если после этого я получу статус git, дерево будет чистым. Если я снова зафиксирую и git status, он отобразит файл be.sql в промежуточном индексе как измененный (я не изменил его). И туда-сюда ходит. Я просто хочу, чтобы он выгрузил файл .sql, добавил файл .sql в промежуточный индекс, а ЗАТЕМ зафиксировал каждый раз, когда промежуточный индекс чист. Буду очень признателен за любые идеи относительно того, почему это происходит.


person Community    schedule 27.02.2017    source источник
comment
Попробуйте добавить выход 0 в последнюю строку (видел это в нескольких примерах в Интернете)   -  person barat    schedule 28.02.2017
comment
В вашем скрипте есть cd, который перемещает его из текущего каталога — что немного сложно для ловушек Git — в какой-то другой каталог. Но в то же время вы не переопределяете различные переменные среды Git, а это означает, что те, которые установлены Git для направления Git к определенному репозиторию, индексному файлу и/или путям рабочего дерева, могут по-прежнему указывать Git. к конкретным (и теперь потенциально неправильным) таким файлам. Я не уверен, делает ли Git-for-Windows что-то странное и особенное по сравнению с обычным Git, но обычный Git устанавливает переменные на основе аргументов между git и подкомандой, плюс .. , [продолжение]   -  person torek    schedule 28.02.2017
comment
хуки commit (pre-commit, edit-commit-msg) запускаются с установленным GIT_INDEX_FILE. К счастью, изменение индексного файла (индексной области) явно разрешено в хуке перед фиксацией, во всяком случае, начиная с версии Git 1.5.4. Однако путь может быть относительным, и если это так, и вы переходите в другое место, вам нужно будет его настроить.   -  person torek    schedule 28.02.2017
comment
Привет Торек, спасибо за заметки. Я уже ответил на вопрос в этой теме, я не могу принять его в качестве ответа на другой день, поэтому этот вопрос все еще открыт.   -  person    schedule 28.02.2017
comment
Привет Торек, я хотел написать еще раз и спасибо за ваш комментарий. Это не решило мою первоначальную проблему, но на днях это начало происходить снова, и это была другая проблема, связанная с тем, как синхронизация файлов (включая хуки) приводила к повторной синхронизации файлов в каталоге, в котором они только что были зафиксированы. , тем самым поместив его в промежуточный индекс. Когда я вернулся к этой ветке и прочитал ваш комментарий, это побудило меня перепроверить каталоги, которые читали хуки, и я заметил, что синхронизация перезаписывает правильный каталог. Спасибо еще раз.   -  person    schedule 08.03.2017


Ответы (1)


С использованием:

git commit -m "Message" --allow-empty

при совершении фиксации, похоже, сработало. Кажется, что git нужны другие поэтапные изменения, чтобы хук заработал. Таким образом, по сути, это не было коммитом, но все еще выгружался файл be.sql, который затем отображался в промежуточном индексе как измененный в следующий раз, потому что дата изменилась. Чтобы коммит полностью прошел независимо от того, были ли другие поэтапные изменения или нет, я использовал параметр --allow-empty, который разрешает коммит без ничего в поэтапном индексе.

person Community    schedule 27.02.2017