我发现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,以防万一。
答案 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
。