GIT - ограничение файла перед фиксацией - PullRequest
0 голосов
/ 20 октября 2011

Я все еще просматриваю другие подобные вопросы, но я не совсем нашел то, что искал, и надеялся на некоторую помощь.

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

A \ <- В каталоге будут только * .a файлы </p>

B \ <- В каталоге будут только * .b файлы </p>

C \Каталог <- C будет содержать только файлы * .c, * .d и * .f </p>

Я знаю, что мне нужно использовать ловушку pre-commit для проверки на валидацию, но я не уверен, что лучшеспособ сделать это.Прямой ответ, по-видимому, заключается в переходе к каждому каталогу и проверке наличия только ожидаемых расширений, но это может оказаться довольно длинным / сложным сценарием, поскольку в некоторых каталогах допускается несколько (иногда 10 или более) расширений файлов.* Если знает какой-то более простой способ, я хотел бы услышать любой совет.

1 Ответ

1 голос
/ 21 октября 2011

Возможно, вы хотите проанализировать вывод команды Git.Наиболее очевидный выбор:

git diff --cached --name-only --diff-filter=ACR

. Будет напечатан список всех добавленных (A), скопированных (C) и переименованных (R) файлов.При желании вы также можете проверить измененные файлы (M), но если вы не позволите им войти в первую очередь, в этом нет необходимости.--name-only удерживает вас от получения фактической разницы, а --cached говорит ему смотреть на индекс (промежуточную область), а не на рабочее дерево, которое может содержать неустановленные изменения.Затем вы можете выполнить любую проверку для каждого напечатанного имени файла.

В качестве альтернативы, вы можете сделать diff каталог за каталогом, чтобы упростить проверку, например:

git diff --cached --name-only --diff-filter=ACR directory-A | grep -v '\.a$'

который выдаст список всех файлов, имена которых не оканчиваются на ".a".Замените directory-A и '\.a$' переменными, а затем вы можете просто перебрать список пар каталог / регулярное выражение.

...