7

我正在尝试创建一个别名,git commit该别名也将消息记录到一个单独的文本文件中。但是,如果git commit返回"nothing to commit (working directory clean)",则不应将任何内容记录到单独的文件中。

这是我的代码。git commit别名有效;输出到文件有效。但是,无论从git commit.

function git-commit-and-log($msg)
{
    $q = git commit -a -m $msg
    $q
    if ($q –notcontains "nothing to commit") {
        $msg | Out-File w:\log.txt -Append
    }
}

Set-Alias -Name gcomm -Value git-commit-and-log

我正在使用 PowerShell 3。

4

2 回答 2

8

$q包含 Git 标准输出的每一行的字符串数组。要使用-notcontains,您需要匹配数组中项目的完整字符串,例如:

$q -notcontains "nothing to commit, working directory clean"

如果要测试部分字符串匹配,请尝试使用-match运算符。(注意 - 它使用正则表达式并返回匹配的字符串。)

$q -match "nothing to commit"

-match如果左操作数是数组,则将起作用。所以你可以使用这个逻辑:

if (-not ($q -match "nothing to commit")) {
    "there was something to commit.."
}

另一种选择是使用-like/-notlike运算符。这些接受通配符并且不使用正则表达式。将返回匹配(或不匹配)的数组项。所以你也可以使用这个逻辑:

if (-not ($q -like "nothing to commit*")) {
    "there was something to commit.."
}
于 2013-04-28T00:01:43.000 回答
4

请注意,-notcontains运算符并不意味着“字符串不包含子字符串”。这意味着“集合/数组不包含项目”。如果“git commit”命令返回一个字符串,你可能会尝试这样的事情:

if ( -not $q.Contains("nothing to commit") )

即,使用 String 对象的Contains方法,如果字符串包含子字符串,则返回 $true。

于 2013-04-27T23:56:00.007 回答