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

zzz*_*fly 17 git msbuild continuous-integration

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

任何输入将不胜感激:)

Dun*_*art 41

@eckes的答案很接近但实际上是在运行我的bat/cmd文件,好像它们是bash脚本一样.如果你想将它们作为批处理文件运行,这对我有用:

后收到

#!/bin/sh
# important that it's got the .exe on the end!
cmd.exe /c "C:\path\to\somebatch.cmd"
Run Code Online (Sandbox Code Playgroud)

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%
Run Code Online (Sandbox Code Playgroud)

  • 试试`cmd.exe/c"$(pwd)\ somebatch.cmd"` (5认同)
  • 请注意,出于某种原因,与正常提示中的命令不同,**CASE**非常重要!`cmd.exe/C`不起作用,只有`cmd.exe/c` !!! 我花了半个小时才搞清楚.把它添加到答案中会更好(我会在自己做之前等待其他人的确认). (2认同)

eck*_*kes 20

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

将post-commit钩子模板重命名为.git/hooks/post-commit.sampleto .git/hooks/post-commit并通过简单地写入批处理文件的名称来调用批处理文件:

#!/bin/sh
path/to/batchfile.bat
Run Code Online (Sandbox Code Playgroud)

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

  • -1因为它不正确.虽然这里的扩展名为`.bat`的`batchfile.bat`,但它实际上是作为bash脚本运行的. (5认同)