我正在创建一个简单的单行批处理文件,以我首选的格式运行git日志。当我在PowerShell中时,我输入:
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>...]'
我做错了什么?
答案 0 :(得分:3)
git log --pretty=format:
命令仅使用换行符(0x0A)终止每一行。 Windows上的大多数工具(如记事本)都希望使用回车符(0x0D)和以及换行符终止行。但是,cmd只对新行进行了特殊处理,使控制台输出看起来很漂亮。
因此,批处理文件应如下所示:
git log --pretty=format:"%%ai%%x09%%H%%x09%%s%%x0D" > commitlog.csv
注意额外的%%x0D
手动添加回车符。正如您已经发现的那样,需要%%
来转义批处理脚本中的单个%
。
1>
只是>
在这里基本相同。 1只是stdout的数值(与stderr相比为2),但默认是重定向stdout。 Cmd只是在打印前进行规范化,以命令它运行。
Minor nit:您可能希望重定向到commitlog.tsv
,因为值由制表符分隔,而不是逗号。 : - )
Windows上的Git经常受到这类新行问题的困扰,所以请注意其他地方的问题。