Git日志路径参数似乎阻止将输出保存到文件中

时间:2014-03-05 19:05:07

标签: git shell alias

我发现git log功能在我尝试过的命令行和GUI中都是笨重的,所以我试着编写一个git别名来获取文件的差异历史并打开它在文本编辑器中(因此我更容易快速阅读)。

到目前为止,我写了以下别名:

[alias]
    trace = "!f() { NOW=$(date +"%Y.%m.%d_%H.%M.%S"); FILE="~/Documents/git-traces/file_diff_$NOW.txt"; > $FILE; git --no-pager log -p --follow --pretty=oneline -- $1 > $FILE; 'C:/Program Files/Sublime Text 2/sublime_text.exe' $FILE; }; f"

如果没有-- $1参数,别名效果很好 - 它可以正常运行git log命令并将输出存储在生成的文件中。

此外,当我将输出保留在控制台中时,该命令正常工作 - 它显示我想要的没有问题。

但是,如果同时包含-- $1> $FILE,则文件最终为空。

有谁知道为什么这些参数似乎不能一起工作?有什么想法让它发挥作用吗?

之前我没有做太多的shell脚本,所以如果我刚犯了一个新错误,请告诉我:))

编辑:我在WIndows 7上使用msysgit v1.8.4,以防万一。

1 个答案:

答案 0 :(得分:1)

Git在POSIX mode中启动shell,因此代字号扩展不是您所期望的那样:

  

Tilde扩展仅对命令名称之前的赋值执行,而不是对该行上的所有赋值语句执行。

使用$HOME代替~代字号。并将这个简短的例子作为试驾,

$ git config alias.trace '!f(){F="$HOME/file_diff_$(date+"%Y.%m.%d_%H.%M.%S")"; git --no-pager log -p --follow --pretty=oneline -- "$@" > $F; head $F; }; set -x; f'

在您确信所有命令都符合预期后,删除set -x