【问题标题】:GIT post-receive hook doesn't runGIT post-receive hook不运行
【发布时间】:2013-06-19 02:09:22
【问题描述】:

这个问题被问了很多次,我浏览了无数的线程和谷歌页面,但似乎没有一个能够解决我的问题。也许我没有按照标准方式执行此操作,但它应该仍然有效。

我有一个有 git repo 的远程服务器

我通过 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 <Denis@WWOscar.Waudware.local>
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 -接收

post-receive的内容是:

#!bin/sh
touch worked.txt
SMTPSERVER=10.0.0.2
FROM=git-push-alert@waudware.com
TO=denis@waudware.com
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。任何关于您认为可能导致此问题的原因的提示都表示赞赏!

附: ls -la 在 hooks 文件夹中:

WAUDWARE\denis@WWBert /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

编辑:我有进步。我没有从 NetBeans IDE 推送,而是使用 Git GUI 查看更详细的输出。这是我推送到远程时发生的情况:remote: fatal: cannot exec 'hooks/post-receive': Permission denied[K To ssh://WAUDWARE\denis@wwbert/cygdrive/d/Shared_Data/Development/dev_NetBeans/Projects/PICS.git ab6ddef..a5644e8 master -> master。你可以在帖子中看到我的权限。他们有什么问题吗?是否还有其他一些权限可以阻止执行 post-receive?

【问题讨论】:

  • 考虑到钩子是在 repo (stackoverflow.com/a/11655420/6309) 的根目录上执行的,你确定你在正确的地方寻找一个 'worked.txt' 文件,并且那个 '@987654330 @' 指的是正确的目录?
  • @VonC 后接收位于 pics.git/hooks 文件夹中;但是,touch worked.txt 似乎没有出现在 pics.git 目录或 pics.git/hooks/ =( 日志目录在 pics.git/logs/ 中。从你所说的来看,似乎是一个帖子-接收将像从 pics.git 一样运行,所以我不需要升级?
  • @VonC 刚刚尝试将我的 ../logs/ 更改为 logs,就好像它是从 pics.git 目录运行一样;但是,仍然没有运气。如果以sh hooks/post-receive 执行,脚本仍然有效,但当我从本地推送到远程时不会:/
  • @VonC 我取得了进展。我没有从 NetBeans IDE 推送,而是使用 Git GUI 查看更详细的输出。这是我推送到远程时发生的事情:remote: fatal: cannot exec 'hooks/post-receive': Permission denied[K To ssh://WAUDWARE\denis@wwbert/cygdrive/d/Shared_Data/Development/dev_NetBeans/Projects/PICS.git ab6ddef..a5644e8 master -&gt; master。你可以在帖子中看到我的权限。他们有什么问题吗?是否还有其他一些权限可以阻止执行 post-receive?

标签: git githooks git-post-receive


【解决方案1】:

您在脚本的 hash-bang(第一)行缺少前导 /。

这里有一些其他的调试技巧:

请注意,您可以使用 $GIT_DIR 来定位与 repo 相关的内容。

另一个想法是在shell中打开echo。

#!/bin/bash -x

那么遥控器应该会准确地告诉你是哪一行让你感到悲伤。

最后,我认为您在 SUBJECT= 行上的嵌套引号存在问题。 您可以使用单引号作为内引号。 LOGFILE 也有同样的问题。

【讨论】:

  • 我不知道它是什么,但我在第一行添加了前导 / 以及 -x 并且今天早上一切正常。我昨晚得到的许可错误似乎已经消失了。这些调试技巧非常棒!我可以看到每一行都在做它应该做的事情!谢谢!
猜你喜欢
  • 2015-03-22
  • 1970-01-01
  • 1970-01-01
  • 2014-06-02
  • 2013-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-11
相关资源
最近更新 更多