我正在尝试创建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。
答案 0 :(得分:8)
$q
包含Git stdout每行的字符串数组。要使用-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.."
}
答案 1 :(得分:3)
请注意, -notcontains 运算符并不意味着“字符串不包含子字符串”。这意味着“集合/数组不包含项目”。如果“git commit”命令返回单个字符串,您可以尝试这样的事情:
if ( -not $q.Contains("nothing to commit") )
即,使用String对象的 Contains 方法,如果字符串包含子字符串,则返回$ true。