2013-06-21 2 views
3

Это задавали много раз, и я прошел через бесчисленные потоки и страницы Google, но никто, похоже, не смог исправить мою проблему. Возможно, я не делаю это стандартным способом, но он все равно должен работать.Крючок-приемник GIT не запускается

У меня есть удаленный сервер, который имеет Git репо

я нажимаю на него из локально через SSH:

git add Y:\NetBeansProjects\pics\pics-client-branding\src\main\java\com\waudware\pics\viewer\TypeTopComponent.java 
git commit -m Testing GIT Friday 8 Y:\NetBeansProjects\pics\pics-client-branding\src\main\java\com\waudware\pics\viewer\TypeTopComponent.java 
Commit Log 
revision : b2d7fd5cbafbfddfccf8d3c8ac75614c4b357887 
author  : Denis <[email protected]> 
date  : Jun 21, 2013 3:21:47 PM 
summary : Testing GIT Friday 8 

INFO: End of Commit 

==[IDE]== Jun 21, 2013 3:21:48 PM Committing... finished. 
==[IDE]== Jun 21, 2013 3:21:52 PM Pushing 
git push ssh://wwbert/cygdrive/d/Shared_Data/Development/dev_NetBeans/Projects/PICS.git +refs/heads/master:refs/heads/master 
Remote Repository Updates 
Branch : master 
Old Id : e51af3dbc01ee2372f9c92bb8070cb1100bef220 
New Id : b2d7fd5cbafbfddfccf8d3c8ac75614c4b357887 
Result : OK 

Local Repository Updates 
Branch : origin/master 
Old Id : e51af3dbc01ee2372f9c92bb8070cb1100bef220 
New Id : b2d7fd5cbafbfddfccf8d3c8ac75614c4b357887 
Result : FAST_FORWARD 

==[IDE]== Jun 21, 2013 3:21:56 PM Pushing finished. 

Принудительные работает отлично и удаленный репозиторий обновляется. Я могу легко проверить, что с помощью шпатлевки и бега git show. Тем не менее, крюк post-receive, который я написал, не запускается. Удаленная папка проекта git: wwbert/cygdrive/d/Shared_Data/Development/dev_NetBeans/Projects/PICS.git и крючок находится в wwbert/cygdrive/d/Shared_Data/Development/dev_NetBeans/Projects/PICS.git/hooks/post -Получить

содержание после приема являются:

#!bin/sh 
touch worked.txt 
SMTPSERVER=10.0.0.2 
[email protected] 
[email protected] 
SUBJECT="Subject: GIT [commit] $(date +"%m-%d-%Y")" 
LOGFILE="commit-$(date +"%m-%d-%Y").log" 
DIFF=1 
SHORTLOG=1 
echo "$SUBJECT" > ../logs/"$LOGFILE" 
echo >> ../logs/"$LOGFILE" 
git log --since=yesterday >> ../logs/"$LOGFILE" 
if [ "$DIFF" == "1" ]; then 
     git show --pretty >> ../logs/"$LOGFILE" 
fi 

git send-email --smtp-server "$SMTPSERVER" --to "$TO" --from "$FROM" ../logs/"$LOGFILE" 

я должен отметить, что выполнение этого файла вручную отправляет электронную почту, как и ожидалось. Но никогда не запускается как крючок. Даже не touch. Любые намеки на то, что вы думаете, причина этого может быть оценена!

P.S. ls -la на крючках папку:

WAUDWARE\[email protected] /cygdrive/d/Shared_Data/Development/dev_NetBeans/Projects/pics.git/hooks 
$ ls -la 
total 38 
drwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 4096 2013-06-21 15:20 . 
drwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 4096 2013-06-21 14:48 .. 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 452 2013-04-23 10:02 applypatch-msg.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 896 2013-04-23 10:02 commit-msg.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 160 2013-04-23 10:02 post-commit.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 514 2013-06-21 16:08 post-receive 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 552 2013-04-23 10:02 post-receive.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 189 2013-04-23 10:02 post-update.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 398 2013-04-23 10:02 pre-applypatch.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 1578 2013-04-23 10:02 pre-commit.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 4951 2013-04-23 10:02 pre-rebase.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 1239 2013-04-23 10:02 prepare-commit-msg.sample 
-rwxr-x--- 1 WAUDWARE\denis WAUDWARE\12513 3611 2013-04-23 10:02 update.sample 

Edit: я был прогресс. Вместо того, чтобы выталкивать из среды IDE NetBeans, я использовал Git GUI, чтобы увидеть более подробный вывод. Вот что произошло, когда я нажал на пульт: remote: fatal: cannot exec 'hooks/post-receive': Permission denied[K To ssh://WAUDWARE\[email protected]/cygdrive/d/Shared_Data/Development/dev_NetBeans/Projects/PICS.git ab6ddef..a5644e8 master -> master. Вы можете видеть мои разрешения в сообщении. Что-то не так с ними? Существуют ли другие разрешения, которые могут препятствовать выполнению post-receive?

+0

Учитывая, что крючки выполняются в корневом каталоге репо (http://stackoverflow.com/a/11655420/6309), вы уверены, что ищете файл 'work.txt' в правой части место, и что '' ../ logs' 'относится к правильному каталогу? – VonC

+0

@ VonC post-receive находится в папке pics.git/hooks; однако 'touch work.txt', похоже, не отображается ни в каталоге pics.git, ни в pics.git/hooks/= (каталог журналов находится в pics.git/logs /. Из того, что вы сказали, кажется, что post-receive будет запускаться, как если бы из pics.git, поэтому мне не нужно подниматься на уровень? –

+0

@VonC Просто попытался изменить мои '../ logs /' только на 'logs', как если бы он запускался из pics.git dir, тем не менее, все еще не повезло. Скрипт по-прежнему работает, если выполняется как «sh hooks/post-receive», но не при нажатии с локального на удаленный:/ –

ответ

5

Вам не хватает ведущей/на линии хеширования (1-го) вашего скрипта.

Вот некоторые другие отладочные советы:

Обратите внимание, что вы можете использовать $ GIT_DIR, чтобы найти вещи по отношению к репо.

Другая идея - включить эхо в оболочку.

#!/Bin/Баш -x

Затем пульт должен показать вам, какие именно линии причиняет вам горе.

Наконец, я думаю, что проблема с вашими вложенными кавычками на строке SUBJECT =. Вы можете использовать одинарные кавычки для внутренних кавычек. Аналогичная проблема имеет и проблема с LOGFILE.

+0

Я не знаю, что это было, но я добавил ведущий/на первой строке, а также -x, и все работало этим утром. Ошибка разрешения, которую я получал прошлой ночью, похоже, ушла. И эти отладочные советы были очень хороши! Я видел, как каждая линия делает то, что она должна была! Благодаря! –