2015-04-01 234 views
3

我创建了一个简单的单行批处理文件,以我的首选格式运行git日志。当我在PowerShell中时,我输入:Git命令行和批处理文件有不同的输出

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>...]' 

我在做什么错?

回答

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只是标准化,以命令它运行。

小问题:您可能希望重定向到commitlog.tsv,因为值之间用制表符分隔,而不是逗号。:-)

Git在Windows上经常受到这些类型的换行问题的困扰,因此请在其他地方寻找它们。

+0

我的Windows程序没有与换行符有关的问题,一切都在它本应该是的行上。无论如何,我尝试了你的建议,但添加%% x0D并没有改变我的输出结果。出于某种奇怪的原因,当我运行批处理文件时,实际上并没有添加TABS(%% x09),每一行中的数据只是一起运行。 – Trashman 2015-04-02 13:00:16

+0

而.tsv不是Excel识别的文件类型,所以我不使用它。它可以解析csv文件,而不管使用什么实际的分隔符。 – Trashman 2015-04-02 13:02:39