每次git推送后执行脚本

时间:2016-08-25 04:05:43

标签: linux git bash

有一台服务器在运行并且有一个git实例。我希望每次用户执行git push到服务器时都运行一个脚本。我希望我的脚本被执行然后git push继续。 有什么工作吗?

3 个答案:

答案 0 :(得分:4)

我不确定你是否想在推或之前运行一个scipt。所以这是我对推前的回答。但是如果你想推后推(即推后),你必须相应地更改 $total_amount =''; foreach ($rows AS $row) { if ($row['id_supplier'] == $id_supplier) { $qtys = $row['qtys']; $unit_rm = $row['unit_rm']; $total = $row['total']; $total_amount += $total; echo '<em>'. htmlentities($qtys, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;'; echo '<em>'. htmlentities($unit_rm, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;'; echo '<em>'. htmlentities($total, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;';}} foreach ($name_items AS $name_item) { echo $name_item; echo '<em>'. htmlentities($name_item, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;'; } echo '<em>'. htmlentities($inc_number, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;'; echo '<em>'.htmlentities($cur_yr, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;'; echo '<em>'. htmlentities($total_amount, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;'; echo '<em>'. htmlentities($name_employee, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;'; echo '<em>'. htmlentities($autoid, ENT_COMPAT, 'UTF-8').'</em><br>&nbsp;';?> <div class="form-group"> <input type="hidden" id="inc_number" name="inc_number[]" value="<?php echo $inc_number;?>"/> <input type="hidden" id="autoid" name="autoid[]" value="<?php echo $autoid;?>"/> <input type="hidden" id="year" name="year[]" value="<?php echo $cur_yr;?>"/> <input type="hidden" id="name_employee" name="name_employee[]" value="<?php echo $name_employee;?>"/> <input type="hidden" id="status_po" name="status_po[]"/> <input type="hidden" id="date" name="date[]"/> <input type="hidden" id="id_submit" name="id_submit[]"/> <input type="hidden" id="id_supplier" name="id_supplier[]" value="<?php echo $id_supplier; ?>"/> <input type="hidden" id="name_item" name="name_item[]" value="<?php echo $name_item; ?>"/> <input type="hidden" id="request_number" name="request_number" value="<?php echo $request_number;?>"/> <input type="hidden" id="unit_rm" name="unit_rm[]" value="<?php echo $unit_rm; ?>"/> <input type="hidden" name="qty[]" id="qty" value="<?php echo $qtys; ?>" class="form-control input-sm"> <input type="hidden" name="total_amount[]" id="total_amount" value="<?php echo $total_amount; ?>" class="form-control input-sm"> <input type="hidden" name="amount[]" id="amount" value="<?php echo $total; ?>" class="form-control input-sm"> </div><?php} } }?> <input type="submit" name="submit_autoid" id="submit_autoid" value="Submit Order" class="btn pull-right btn success"/></a> </form> <?php if (isset($_POST['submit_autoid'])){ $request_number=$_POST['request_number']; $inc_number=$_POST['inc_number']; $autoid=$_POST['autoid']; $name_item=$_POST['name_item']; $year=$_POST['year']; $name_employee=$_POST['name_employee']; $status_po=$_POST['status_po']; $date=$_POST['date']; $id_supplier=$_POST['id_supplier']; $qtys=$_POST['qty']; $unit_rm=$_POST['unit_rm']; $total=$_POST['amount']; $total_amount=$_POST['total_amount']; $id_submit=$_POST['id_submit']; for($i=0; $i<count($inc_number); $i++){ mysql_query("INSERT INTO tbl_autoid (request_number,inc_number,autoid,year,name_employee,status_po, date, id_supplier, total_amount, id_submit) VALUES ('$request_number', '".$inc_number[$i]."', '".$autoid[$i]."','".$year[$i]."','".$name_employee[$i]."','In Process',now(), '".$id_supplier[$i]."','".$total_amount[$i]."', '1')") or die('Error'); } for($m=0; $m<count($name_item); $m++){ mysql_query("INSERT INTO tbl_purchase_order (autoid,request_number,id_supplier,name_item,qty,unit_rm,amount, status, date, name_employee) VALUES ('".$autoid[$m]."','$request_number', '".$id_supplier[$m]."', '".$name_item[$m]."','".$qtys[$m]."','".$unit_rm[$m]."','".$total[$m]."','Done', NOW(),'".$name_employee[$m]."')") or die('Error'); } ?> <script> window.location="record.php?request_number=<?php echo $request_number; ?>"; </script> 挂钩以检查是否成功推送,然后你可以做推后推送。

根据@Travis的建议,pre-push是您正在寻找的。因此,要预推执行脚本,您必须在git hooks中创建pre-push文件。因此,在这种情况下,将您的一堆代码放在帖子前脚本文件.git/hooks中并保存。然后通过.git/hooks/pre-push使其可执行。成功完成此操作后,您将能够在每次运行push命令时看到脚本执行。

PS:请注意,我还没有对这整体进行测试,但预计会以这种方式工作。

简而言之,假设您(Linux用户)位于项目目录中

chmod +x .git/hooks/pre-push

答案 1 :(得分:2)

您已对此GitHub进行了标记,因此我假设您指的是公共GitHub,而不是GitHub企业。

您无法运行脚本&#34;服务器端&#34;在GitHub的服务器上,因为这显然是一个巨大的漏洞,但您可以设置一个Web挂钩来触发另一台服务器上的脚本。

基本上每当有人进行推送时,都会向特定的URL发送有关推送的数据。然后,您可以从中触发脚本。有关Web挂钩的更多信息,请参阅GitHub API docs

答案 2 :(得分:1)

你应该研究一下git hooks:

8.3 Customizing Git - Git Hooks

和另一个关于这项技术的网站:

githooks.com