我正在创建一个简单的单行批处理文件,以我首选的格式运行git日志.当我在Power
Shell中时,我输入:
git log --pretty=format:"%ai%x09%H%x09%s" > commitlog.csv
它给了我我想要的输出.它是提交作者的ISO格式的日期和时间,后跟一个选项卡,后跟完整的SHA哈希,后跟注释/描述.它在Excel中以我想要的方式打开.
我试图制作一个简单的批处理文件来做同样的事情,所以我不必记住格式字符串或搜索命令历史记录(无论如何偶尔会被清除).我注意到我必须使用双倍百分比%%来替换所有百分号.
在批处理文件的一个版本中,我有这一行:
git log --pretty=format:"%%ai%%x09%%H%%x09%%s" > commitlog.csv
我注意到这样的命令:
git log --pretty=format:"%ai%x09%H%x09%s" 1>commitlog.csv
由于某种原因,其中有一个“1”插入其中,但奇怪的是创建了一个包含信息的文件,只是排除了标签,所以它们一起运行.我读到的大于’>’需要以克拉为先,如此’^>’
因此,在批处理文件的下一个版本中,我将行更改为:
git log --pretty=format:"%%ai%%x09%%H%%x09%%s" ^> commitlog.csv
哪个命令如下:
git log --pretty=format:"%ai%x09%H%x09%s" > commitlog.csv
我已经盯了很长时间了很多次,看起来确实是我在PowerShell中键入的内容,我希望得到相同的结果,但我得到一条错误信息:
fatal: ambiguous argument '>': unknown revision or path not in the working tree. Use '--' to separate paths from revisions,like this: 'git <command> [<revision>...] -- [<file>...]'
我究竟做错了什么?
解决方法
git log –pretty = format:命令只用换行符(0x0A)终止每一行. Windows上的大多数工具(如记事本)都希望使用回车符(0x0D)和换行符终止行.但是,cmd只对新行进行了特殊处理,使控制台输出看起来很漂亮.
因此,批处理文件应如下所示:
git log --pretty=format:"%%ai%%x09%%H%%x09%%s%%x0D" > commitlog.csv
注意额外的%% x0D手动添加回车符.正如您已经发现的那样,需要%%来转义批处理脚本中的单个%.
1 GT;并且只是>在这里基本相同. 1只是stdout的数值(与stderr相比为2),但默认是重定向stdout. Cmd只是在打印之前进行规范化以命令它将运行.
Minor nit:您可能希望重定向到commitlog.tsv,因为值由制表符分隔,而不是逗号.