des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак

Git pre commit как отследить что файл не попал в commit?

Есть специфичная ситуация, что есть файл, который нельзя добавить в gitignore, но и комитить его нельзя. Как в git hook отследить что файл не в коммите?
  • Вопрос задан
  • 72 просмотра
Решения вопроса 1
sergey-kuznetsov
@sergey-kuznetsov Куратор тега Git
Автоматизатор
Поможет примерно такой pre-commit-хук:
#!/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".

if git rev-parse --verify HEAD >/dev/null 2>&1
then
	against=HEAD
else
	# Initial commit: diff against an empty tree object
	against=$(git hash-object -t tree /dev/null)
fi

# Redirect output to stderr.
exec 1>&2

# полные пути от корня репо, разделенные символами новой строки
SECRET_FILES='secret.txt
dir/secret2.txt'

if git diff --cached --name-only $against |
   grep --quiet --line-regexp --fixed-strings "$SECRET_FILES"
then
  echo Попытка закоммитить запрещённые файлы
  exit 1
else
  exit 0
fi

# If there are whitespace errors, print the offending file names and fail.
exec git diff-index --check --cached $against --


Я взял шаблон в папке hooks и чуть подправил под себя (строки с русскими комментариями)

Пример работы:
❯ git add secret.txt
❯ git commit -m 'test hook'
Попытка закоммитить запрещённые файлы
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@rPman
исключите .gitignore из комитов, и делайте с ним что хотите, при необходимости опубликовать изменения, убирайте ваш файл из этого списка, и по новой.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы