2016-10-06 139 views
1

git log --oneline --decorate定義的格式在哪裏?我不能再現分支,標籤和HEAD的顏色,如git log --oneline --decorate所示。我不能重現分支,標籤和HEAD的顏色,如git log --oneline --decorate所示。如何重現git log的格式--oneline --decorate?

git log --oneline --decorate  

顯示頭部爲淡藍色,分支名稱爲綠色,標點符號(,)爲棕色。

我來得到我想要的東西最接近的是:

git log --graph --abbrev-commit --decorate --date=short --format=format:'%C(bold blue)%h%C(reset) %C(bold green)%ad%C(reset)%d %C(white)%s%C(reset)' -20 

與正在該分支/ HEAD /標籤不着色像前面的命令,唯一的區別。

回答

0

這似乎不可能與git版本< 1.8.3。

由於git的1.8.3,可以使用顏色%C(自動)的令牌:

git log --graph --abbrev-commit --decorate --date=short --format=format:'%C(bold blue)%h%C(reset) %C(bold green)%ad%C(reset) %C(auto)%d %C(reset) %C(white)%s%C(reset)' -20  

的關鍵元件是:

%C(auto)%d %C(reset) 

參見:

Color in git-log
Git pretty format colors

1

TL; DR - 我認爲您不可能得到git log --oneline提供的確切格式,因爲--format選項不允許任何條件語句,而git-log正在使用函數在每個提交消息上生成該字符串。

我用的顏色得到最接近的是這樣的:

git log --format=format:'%C(auto)%h%C(reset) %C(auto)%s%C(reset)' 

看起來這在我的機器上:

terminal-screenshot


龍版本:

的大多數文檔你可以在git的日誌讀取是在這裏:https://git-scm.com/docs/git-log

我開始鑽研源(在github上here),看看究竟是什麼混帳做對--oneline選項,這裏是我的發現:

  • 步道從這裏開始在revision.c,其中所述命令行選項被解析

  • 選項然後在pretty.c解析以匹配cmit_fmt枚舉的CMIT_FMT_ONELINE(在commit.h定義)

  • 最後,實際打印發生在pretty.cpp_commit_easy處。

  • 這是棘手和複雜的地方。您可以在pretty.c的少數幾個地方看到參考CMIT_FMT_ONELINE。我相信當指定--oneline選項時,每次提交只執行pp_title_line。您可以看到,在構造字符串緩衝區時會出現一堆條件格式。

所以,是的,我不認爲有一種方法來複制與標籤和(HEAD -> master)元信息的實際格式。你也許可以編寫一個相同的shell腳本,但是它的性能可能與git的性能不匹配。