如何从git post-commit钩子运行cmd

如何从git post-commit钩子运行cmd,git,msbuild,continuous-integration,Git,Msbuild,Continuous Integration,我想在我的私人项目上有一个微型ci循环,我想如果我可以在一个batfile中运行msbuild,我就可以在cmd窗口上对反馈进行着色,并自动进行构建。因此,如果我能从post-commit钩子中触发蝙蝠,我想这是可能的。这不可能是一个新的想法,但我在谷歌上找不到任何例子 任何输入都将不胜感激:)从post-commit钩子调用.bat文件不需要任何魔法 将.git/hooks/post-commit.sample中的post-commit钩子模板重命名为.git/hooks/post-commi

我想在我的私人项目上有一个微型ci循环,我想如果我可以在一个batfile中运行msbuild,我就可以在cmd窗口上对反馈进行着色,并自动进行构建。因此,如果我能从post-commit钩子中触发蝙蝠,我想这是可能的。这不可能是一个新的想法,但我在谷歌上找不到任何例子


任何输入都将不胜感激:)

从post-commit钩子调用
.bat
文件不需要任何魔法

.git/hooks/post-commit.sample中的post-commit钩子模板重命名为
.git/hooks/post-commit
,只需写入批处理文件的名称即可在中调用批处理文件:

#!/bin/sh
path/to/batchfile.bat

请注意,git钩子的工作目录是repo的根目录。如果使用指向
.bat
文件的相对路径,则必须考虑到这一点。

@eckes的答案很接近,但实际上运行的是我的bat/cmd文件,就好像它们是bash脚本一样。如果要将它们作为批处理文件运行,以下是对我有效的方法:

后接 somebatch.cmd 以下是一些您可能会发现有用的东西/环境变量等:

@echo off

:: read commit hook stdin data e.g. "aa45321… 68f7abf… refs/heads/master"
set /p OLDREV_NEWREV_REFNAME=

echo Directory of this script is %~dp0
echo Repository root is %CD%

set OLDREV=%OLDREV_NEWREV_REFNAME:~0,40%
echo OLDREV: %OLDREV%

set NEWREV=%OLDREV_NEWREV_REFNAME:~41,40%
echo NEWREV: %NEWREV%

set REFNAME=%OLDREV_NEWREV_REFNAME:~82,999%
echo REFNAME: %REFNAME%

thanx-我想我确实认为它更复杂:)请注意,.bat文件第一行中的
@echo
将使此方法失败,因为在这种方法中,.bat文件的运行就像是bash脚本一样。有关有效解决方案,请参阅。-1,因为它不正确。虽然
batchfile.bat
的扩展名为
.bat
,但它实际上是作为bash脚本运行的。huzzah指出了
git钩子的工作目录是2020年repo的根目录,在Windows上使用git 2.23,这个答案如前所述。也就是说,我的批处理不作为bash脚本运行,我对
@echo
没有问题,也不需要使用
cmd.exe
运行。非常好!我可以在没有完整路径的情况下从钩子所在的文件夹运行批处理吗?cmd.exe/c“somebatch.cmd”不起作用请尝试
cmd.exe/c“$(pwd)\somebatch.cmd”
注意,由于某些原因,与来自正常提示的命令不同,这里的情况很重要
cmd.exe/C
不工作,只有
cmd.exe/C
!!!我花了半个小时才弄明白。最好将此添加到答案中(我将等待其他人的确认,然后再自己做)。
@echo off

:: read commit hook stdin data e.g. "aa45321… 68f7abf… refs/heads/master"
set /p OLDREV_NEWREV_REFNAME=

echo Directory of this script is %~dp0
echo Repository root is %CD%

set OLDREV=%OLDREV_NEWREV_REFNAME:~0,40%
echo OLDREV: %OLDREV%

set NEWREV=%OLDREV_NEWREV_REFNAME:~41,40%
echo NEWREV: %NEWREV%

set REFNAME=%OLDREV_NEWREV_REFNAME:~82,999%
echo REFNAME: %REFNAME%