Способ, которым работает ловушка pre-push
, заключается в считывании строк из стандартного ввода, которые указывают, какие ссылки нужно нажать и каковы их старые и новые значения. Как и ваш скрипт, git lfs pre-push
работает как ловушка pre-pu sh и ожидает эти данные на своем стандартном вводе. Затем он определяет, какие объекты LFS должны быть переданы на основе этого, и выталкивает их.
То, что делает ваш хук pre-push
, читает все стандартные входные данные с grep
. Затем он вызывает git lfs pre-push
без ввода. Так как Git LFS считает, что нет никаких ссылок на pu sh (поскольку ни один не был предоставлен на его стандартном входе), он ничего не выдвигает.
Если вы хотите прервать в случае, если вы нажимаете Если указать c ref, то вам нужно, чтобы ваш pre-pu sh хук анализировал стандартный ввод по одной строке за раз, прерывая, если вы соответствуете строке, и добавляя его к будущему вводу в git lfs pre-push
, если вы не «т. Так что-то вроде следующего:
#!/bin/sh
INPUT=""
while read line
do
if echo $line | grep -qs 'testing_AA'
then
echo "You really don't want to push this branch. Aborting." >&2
exit 1
fi
INPUT="$INPUT $line"
done
printf "%s %s %s %s\n" $INPUT | git lfs pre-push