Из файла после получения:
# This script is run after receive-pack has accepted a pack and the
# repository has been updated. It is passed arguments in through stdin
# in the form
# <oldrev> <newrev> <refname>
# For example:
# aa453216d1b3e49e7f6f98441fa56946ddcd6a20 68f7abf4e6f922807889f52bc043ecd31b79f814 refs/heads/master
#
Но когда я проверяю это с echo "$1 $2 $3"
, Я получаю только пустую строку. Кто-нибудь знает почему?
Вот простой пример, подтверждающий ответ koumes21s. Я сделал post-receive скрипт Python со следующим кодом:
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
import sys
print "ARGS:", sys.argv
a = sys.stdin.read()
(old, new, ref) = a.split()
print "Old: %s" % old
print "New: %s" % new
print "Ref: %s" % ref
Вот результат после нажатия. Обратите внимание, что «ARGS» сообщает только имя сценария, а не стандартный ввод.
inneralienmbp$ git push
Counting objects: 5, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 299 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
Unpacking objects: 100% (3/3), done.
remote: ARGS: ['hooks/post-receive']
remote: Old: 5c9f9a43132516040200ae76cc2f4f2cad57d724
remote: New: 95e0e2873eaad2a9befa2dff7e2ce9ffdf3af843
remote: Ref: refs/heads/master
To /Users/tweaver/test2/test.git/
5c9f9a4..95e0e28 master -> master
Спасибо koumes21!
Это потому, что аргументы передаются через стандартный ввод, а не через аргументы командной строки. Это потому, что может быть несколько изменений, которые затем передаются в ваш сценарий в виде нескольких строк. Таким образом, вы можете использовать команду чтения или получить ввод из / dev / stdin.
Вот сообщение в стеке, которое решает эту проблему.
https://stackoverflow.com/a/12367999/1354978
Вот простая версия того, что вы пытаетесь получить:
read oldrev newrev ref
echo "$oldrev"
echo "$newrev"
echo "$ref"
Вот версия, которую я использую для своего CI-сервера и электронной почты.
read oldrev newrev ref
echo "$oldrev" "$newrev" "$ref" | . /usr/share/git-core/contrib/hooks/post-receive-email
if [ "refs/heads/qa" == "$ref" ]; then
# Big Tuna YO!
wget -q -O - --connect-timeout=2 http://127.0.0.1:3000/hooks/build/qa_now
fi