【问题标题】:how do I run cmd from the git post-commit hook如何从 git post-commit 挂钩运行 cmd
【发布时间】:2011-11-16 02:37:33
【问题描述】:

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

任何意见将不胜感激:)

【问题讨论】:

    标签: git msbuild continuous-integration


    【解决方案1】:

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

    接收后

    #!/bin/sh
    # important that it's got the .exe on the end!
    cmd.exe /c "C:\path\to\somebatch.cmd"
    

    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 "somebatch.cmd" 不起作用
    • 试试cmd.exe /c "$(pwd)\somebatch.cmd"
    • 请注意,由于某种原因,与来自正常提示的命令不同,这里的 CASE 很重要! cmd.exe /C 不行,只能cmd.exe /c!!!我花了半个小时才弄明白。最好将此添加到答案中(我会在自己做之前等待其他人的确认)。
    【解决方案2】:

    从提交后挂钩调用 .bat 文件不需要任何魔法。

    .git/hooks/post-commit.sample 中的提交后挂钩模板重命名为.git/hooks/post-commit,并通过简单地写入批处理文件的名称来调用其中的批处理文件:

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

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

    【讨论】:

    • thanx - 我想我确实认为它更复杂:)
    • 请注意 .bat 文件第一行中的 @echo 将使这种方法失败,因为在这种方法中 .bat 文件就像 bash 脚本一样运行。请参阅Duncan's answer 以获得有效的解决方案。
    • -1 因为它不正确。虽然 batchfile.bat 在这里带有扩展名 .bat,但它实际上是作为 bash 脚本运行的。
    • huzzah 指出 the working directory for the git hook is the root directory of your repo
    • 2020 年,在 Windows 上使用 git 2.23,此答案如前所述。也就是说,我的批处理不作为 bash 脚本运行,我对 @echo 没有问题,也不需要使用 cmd.exe 运行。
    猜你喜欢
    • 2013-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 2012-03-09
    • 1970-01-01
    • 2015-08-31
    • 1970-01-01
    相关资源
    最近更新 更多