Мерзавец может сцепиться, автоматически добавляют файлы к фиксации?

Я хотел бы добавить автоматически сгенерированный файл к той же фиксации с помощью пред - или рычаг постфиксации в Мерзавце, зависящем от файлов, которые были изменены в той фиксации. Как я пошел бы об этом?

Я попробовал это как рычаг перед фиксацией, но никакую удачу:

#!/bin/sh
files=`git diff --cached --name-status`
re="<files of importance>"
if [[ $files =~ $re ]]
then
  echo "Creating files"
  exec bundle exec create_my_files
  exec git add my_files
  exec git commit --amend -C HEAD
fi

Это успешно добавляет их к репозиторию, но не добавляет их к фиксации. Я также попытался использовать последние две исполнительных строки в рычаге постфиксации наряду с контролем перед фиксацией, но отрицательный результат также.

58
задан Josh Lee 19 October 2010 в 19:17
поделиться

3 ответа

Вы можете использовать update-index :

git update-index --add my_files

7
ответ дан 24 November 2019 в 18:56
поделиться

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

Единственная причина поместить сгенерированный файл в систему управления версиями - это когда для его создания требуются уникальные / привилегированные ресурсы (например, лицензионная программа) или для его создания требуется значительное количество времени.

Добавлено

Из http://git-scm.com/docs/githooks :

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

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

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

Назначение ловушки перед фиксацией состоит в том, чтобы быть успешной проверкой состояния рабочей области и содержимого фиксации перед совершением фиксации. Попытка изменить содержимое коммита не сработает.

Я бы порекомендовал добавить два шага в ваши сценарии сборки: (1) шаг, на котором будут построены все устаревшие файлы, которые необходимо сгенерировать (и добавлены их в рабочую область), и (2) шаг, который проверяет, что все сгенерированные файлы актуальны, и возвращает ненулевой код состояния. Ваш обработчик предварительной фиксации Git должен выполнить второй шаг. Ваши разработчики должны быть обучены выполнять первый шаг по мере необходимости.

2
ответ дан 24 November 2019 в 18:56
поделиться

Как насчет написания пост-коммита скрипта, который генерирует ваши файлы, а затем чтобы сделать (что-то вроде) git add my_files; git commit --amend.

2
ответ дан 24 November 2019 в 18:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: