我正在尝试使用单个命令从git获取数据,因为多次调用git似乎非常慢。我需要提交,哈希,作者,日期,消息等的基本数据。问题出在消息及其包含任何内容的事实。它们可以包含我在字段之间使用定界符的符号。我还想保留提交消息中的新行。
git log --pretty=format:%H,%an,%ae,%aD,%B:
因此,我将解析输出并简单地用':'分割以获取每个提交的信息,并用','分割以获取每个条目的信息。现在的问题是,如果提交消息中包含逗号或冒号,则它将更改并破坏结果。
是否有任何方法可以清除%B
的输出,还是我只需要使用没有人(希望)永远不会使用或猜测的定界符?
答案 0 :(得分:1)
git log
将结果输出到stdout。如果将结果通过管道传递到另一命令,则将stdout中的所有内容解析为一个对象,而不是单独的提交。您可能需要自己在提交(和分隔)之间进行解析,很可能是使用指定的分隔符。
我不想告诉您,您无法满足您的所有要求...如果您要删除在提交消息中保留换行符的要求,那么我们可以依靠结构化和提交消息之前所有内容的一致格式,将它们解析为单独的项目,然后解析提交消息。这取决于每个逗号的位置是否一致(例如,电子邮件中没有逗号,您的登录日期在星期几之后是一个逗号)。
您还可以使用极不可能的定界符,例如♡或(对不起,布隆迪人)这样的罕见表情符号。我可以毫无问题地在终端中使用它们,它们以git log
格式的字符串工作。