GitKraken игнорирует ловушки предварительного приема на стороне сервера? - PullRequest
1 голос
/ 14 октября 2019

Обходит ли GitKraken хуки предварительного приема на стороне сервера?

У меня есть коммит, который я хочу отправить на сервер.

Однако (для целей тестирования) я установилтривиальный pre-receive хук на сервере, который отклоняет любые и все нажатия и создает файл (как сигнал, что хук работает):

#!/bin/bash

echo tests > $PWD/../x.txt
exit 1

Если я использую Git Bash (для Windows), мой пуш, очевидно, получаетотклонено, но файл x.txt создается из репозитория сервера:

$ git push
[...]
To server/repo.git
 ! [remote rejected] master -> master (pre-receive hook declined)
error: failed to push some refs to 'server/repo.git'

Однако, если я выполняю push через GitKraken, push проходит, а x.txt не создается! Запуск git log на сервере подтверждает, что пуш прошел, поэтому GitKraken не врет.

Как это возможно? Эти хуки не отображаются на соответствующей странице поддержки GitKraken , но я предполагаю, что это все потому, что это все локальные хуки (pre-commit/rebase и т. Д.). Я не могу понять, как он заставляет сервер игнорировать свои собственные хуки ...

В качестве воспроизводимого примера, в Git Bash:

cd /testdir
mkdir repo.git
cd repo.git

git init --bare
# Initialized empty Git repository in /testdir/repo.git/

cat > hooks/pre-receive << EOF
  #!/bin/bash
  echo Nope!
  echo x > ../x.txt
  exit 1
EOF

cd ..
git clone repo.git
# Cloning into 'repo'...
# warning: You appear to have cloned an empty repository.
# done.

cd repo
touch .gitignore
git add .
git commit -m "test"
# [master (root-commit) e9b25d3] test
# Committer: Wasabi <wasabi@email.local>
# Your name and email address were configured [...]
# 1 file changed, 0 insertions(+), 0 deletions(-)
# create mode 100644 .gitignore

git push
# Enumerating objects: 3, done.
# Counting objects: 100% (3/3), done.
# Writing objects: 100% (3/3), 214 bytes | 53.00 KiB/s, done.
# Total 3 (delta 0), reused 0 (delta 0)
# remote: Nope!                          # shows the hook is working
# To testdir/repo.git
#  ! [remote rejected] master -> master (pre-receive hook declined)
# error: failed to push some refs to 'testdir/repo.git'

ls ..
# repo/  repo.git/  x.txt

rm ../x.txt

# Confirming the push really didn't go through
cd ../repo.git
git log
# fatal: your current branch 'master' does not have any commits yet

remote: Nope! и наличие x.txt означает, что хук был вызван, и git log показывает, что мы успешно отклонили толчок.

Однако, если я теперь открою repo в GitKraken, я могу просто нажать «Push», сказать ему, чтобы использоватьисходная / основная ветка по умолчанию и получение уведомления «Push Successful: master to origin».

Подтверждение того, что push действительно прошел, с помощью Git Bash:

cd ../repo.git
git log
# Author: Wasabi <wasabi@email.local>
# Date:   Mon Oct 14 15:00:49 2019 -0300
# 
#     test
...