2015-04-01 83 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

相關問題