【发布时间】:2011-11-16 02:37:33
【问题描述】:
我想在我的私人项目上创建一个微型 ci 循环,并在考虑是否可以在 batfile 中运行 msbuild,我可以在 cmd 窗口上获得彩色反馈并自动构建。因此,如果我可以从 post-commit 钩子中触发 bat,我想这是可能的。这不可能是一个新想法,但我在谷歌上找不到任何例子。
任何意见将不胜感激:)
【问题讨论】:
标签: git msbuild continuous-integration
我想在我的私人项目上创建一个微型 ci 循环,并在考虑是否可以在 batfile 中运行 msbuild,我可以在 cmd 窗口上获得彩色反馈并自动构建。因此,如果我可以从 post-commit 钩子中触发 bat,我想这是可能的。这不可能是一个新想法,但我在谷歌上找不到任何例子。
任何意见将不胜感激:)
【问题讨论】:
标签: git msbuild continuous-integration
@eckes 的回答很接近,但实际上是在运行我的 bat/cmd 文件,就好像它们是 bash 脚本一样。如果您想将它们作为批处理文件运行,这对我有用:
#!/bin/sh
# important that it's got the .exe on the end!
cmd.exe /c "C:\path\to\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%
【讨论】:
cmd.exe /c "$(pwd)\somebatch.cmd"
cmd.exe /C 不行,只能cmd.exe /c!!!我花了半个小时才弄明白。最好将此添加到答案中(我会在自己做之前等待其他人的确认)。
从提交后挂钩调用 .bat 文件不需要任何魔法。
将.git/hooks/post-commit.sample 中的提交后挂钩模板重命名为.git/hooks/post-commit,并通过简单地写入批处理文件的名称来调用其中的批处理文件:
#!/bin/sh
path/to/batchfile.bat
请注意,git hook 的工作目录是 你的 repo 的根目录。如果您使用 .bat 文件的相对路径,则必须考虑到这一点。
【讨论】:
@echo 将使这种方法失败,因为在这种方法中 .bat 文件就像 bash 脚本一样运行。请参阅Duncan's answer 以获得有效的解决方案。
batchfile.bat 在这里带有扩展名 .bat,但它实际上是作为 bash 脚本运行的。
the working directory for the git hook is the root directory of your repo
@echo 没有问题,也不需要使用 cmd.exe 运行。