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

$qGit の 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.."
}
于 2013-04-28T00:01:43.000 に答える
4

-notcontains演算子は、「文字列に部分文字列が含まれていない」という意味ではないことに注意してください。「コレクション/配列にアイテムが含まれていない」ことを意味します。「git commit」コマンドが 1 つの文字列を返す場合は、次のようにしてみてください。

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

つまり、String オブジェクトのContainsメソッドを使用します。このメソッドは、文字列に部分文字列が含まれている場合に $true を返します。

于 2013-04-27T23:56:00.007 に答える