Windows の git bash で次の git コマンドを使用しています。
git log --format="%C(cyan)%cd%Creset %s" --date=short -5
コミット日 ( %cd
) の後にコミット メッセージ ( %s
) が表示されます。コミット日は、カラー マーカーで囲まれています:%C(cyan)
カラー出力を開始し、カラー出力%Creset
を停止します。
cmd
git bash では問題なく動作します%cd%
が、Windows シェルによって現在の作業ディレクトリ ( $PWD
bash と同等)に展開されるとうまくいきません。
したがって、そのコマンドを 経由cmd
で実行すると、最初の列にコミット日付の代わりに現在の作業ディレクトリが表示されます!
ギットバッシュ:
2015-10-08 commit msg
2015-10-08 commit msg
2015-10-07 commit msg
2015-10-06 commit msg
2015-10-06 commit msg
コマンド:
D:\git\someFolderCreset commit msg
D:\git\someFolderCreset commit msg
D:\git\someFolderCreset commit msg
D:\git\someFolderCreset commit msg
D:\git\someFolderCreset commit msg
実際、私はcmd
自分で直接使用したことはありません.nodejs(0.12)スクリプトを書いているときにこの動作を見つけました。
require('child_process').execSync('git log --format=...', {stdio: 'inherit'})
これは、Windows では when を使用してノードによって実行されますcmd
)。
簡単な回避策は、スペースを導入し%cd%
て見つからないようにすることです。つまり、
git log --format="%C(cyan)%cd%Creset %s" --date=short -5
に
git log --format="%C(cyan)%cd %Creset%s" --date=short -5
ただし、これにより冗長なスペースが導入されました(以前に別のスペースを削除しまし%s
たが、それはまだハックであり、手動の介入が必要です)。
Windows シェルによる拡張を防ぐ方法はありますか?
の使用またはエスケープに関する情報を見つけましたが、ここでは解決策ではありません。%%
^%
%
# produces superfluous ^ characters
git log --format="%C(cyan)^%cd^%Creset %s" --date=short -5
^2015-10-08^ commit msg
^2015-10-08^ commit msg
^2015-10-07^ commit msg
^2015-10-06^ commit msg
^2015-10-06^ commit msg
# seems the expansion is done at command parse time
git log --format="%C(cyan)%%cd%%Creset %s" --date=short -5
%D:\git\someFolder commit msg
%D:\git\someFolder commit msg
%D:\git\someFolder commit msg
%D:\git\someFolder commit msg
%D:\git\someFolder commit msg
理想的な解決策は、冗長な文字を生成せずに bash および cmd と互換性があるか、Windows 用の一般的な UNIX-y コマンドをエスケープして拡張を防止する JavaScript のエスケープ関数 (そのようなエスケープ関数を作成できる場合) のいずれかです。