2009-07-01 50 views
5

我正在寻找一种方法让git-commit等待标准输入。我在PHP编码这一点,因为我的bash技能是不存在的,所以我做的吼声经常从STDIN读取Git预提交钩子(使用PHP)

<?php 
$input = trim(fgets(STDIN)); 
fscanf(STDIN, "%d\n", $line); 
?> 

会做的伎俩,等到我在写东西继续下去,但它只是向前走并继续执行我的PHP脚本。

这个想法背后是,我标记发布后,git会将HEAD推送到测试网络服务器,发送几条推文,并让我在CHANGELOG中发布一些关于发布的细节。

尽管我可以实现对文件的写入(使用exec('mate -w')),但我希望它能够一直持续下去,直到我在服务器上进行快速测试。这将使我能够回滚,如果我发现任何错误(懒惰,我知道)。

感谢您的帮助!

+2

尝试使用`EXEC 2012-04-04 16:52:15

回答

3

大多数git钩子都有一些特殊的东西给stdin或stdin从终端分离。它们都设计成非交互式运行,所以我不认为钩子适合你想要做的事情。当然,您可以手动对话/dev/tty,但我认为这不是一个好主意。

我也不相信'pre-commit'钩子适合你的任务,当然不是你所做的每个提交都会是某种发布吗?测试webserver机器上的“post-receive”挂钩听起来更合适。

+0

是的,实际上我发现为了这些目的,最好将.git/config文件中的一些变量保留下来,并让服务器完成这些相关的任务。 事实证明,这是我比git本身的工作流思想更为棘手的问题。 谢谢! – Roberto 2009-07-02 16:56:36

1

我需要在我的后合并挂钩(用PHP编写)的用户输入。

我用这段代码解决了这个问题:trim(exec('exec < /dev/tty && read input && echo $input'))

不要问,它的工作原理;)