$ git show -s --format=%P 5e23259b959d22281ea8b82ce8546e9436d871e5
2d1dc0c9585dd81a401ed5460f80fcc0a432868a
我们看到一个“父”提交——这很正常。也看一下:
$ git show -s --format=%P 2d1dc0c9585dd81a401ed5460f80fcc0a432868a
39bd96ac28597f012ea76076d6207c03f8586d27 7fc12942fd73c4b1c23c8cb95b861cec290c2a12
是的!有不止一个“父级”——这是一个合并提交。中断工作。
您可以计算一行中的单词数,例如,使用使用wc以下选项启动的程序-w:
$ git show -s --format=%P 5e23259b959d22281ea8b82ce8546e9436d871e5 | wc -w
1
$ git show -s --format=%P 2d1dc0c9585dd81a401ed5460f80fcc0a432868a | wc -w
2
总共是这样的:
#!/bin/sh
branch=$1 # имя указателя (ветка в git — это указатель на коммит)
new=$2 # хэш коммита, на который предлагается переставить указатель
old=$3 # хэш коммита, на который сейчас ссылается указатель
while [ "$new" != "$old" ]; do # пока не добрались до текущего значения
new=`git show -s --format=%P $new` # получаем родителей коммита
nparents=`echo $new | wc -w` # считаем их количество
if [ $nparents -gt 1 ]; then # если оно больше одного
echo "нельзя пушить коммиты слияния!!11одинодин" >&2
exit 1 # завершаем скрипт с любым ненулевым кодом возврата
fi
done
据我了解,您只需要拒绝包含合并提交的推送(如果您需要更复杂的逻辑,请随时用更多人工智能元素补充下面的脚本)。
适合这个钩子叫做
update:所需要的只是遍历所有收到的提交并检查每个提交的“父”提交的数量:合并提交将有多个提交。在这种情况下,以非零返回码退出。
要获取给定提交的“父”提交列表,请使用以下命令
show:我们看到一个“父”提交——这很正常。也看一下:
是的!有不止一个“父级”——这是一个合并提交。中断工作。
您可以计算一行中的单词数,例如,使用使用
wc以下选项启动的程序-w:总共是这样的: