[英]Can I escape chars in git log output?
我想發布處理git log
的輸出並且一直在使用--pretty
設置。 當我這樣做的時候
--pretty=format:'{"sha":"%h","message":"%B","author":"%aN <%aE>","commit":"%cE","date":"%cD"}
我得到一些類似JSON的輸出; 當我在提交消息中放入一個{
或}
甚至一個"
,這會弄亂我的輸出。
有沒有辦法告訴git log
逃避這些字符,例如通過預先添加\\
?
有兩個類似的問題Git日志輸出到XML,JSON或YAML和Git日志輸出最好是XML ,但它們都沒有解決特殊字符的轉義(例如,如果在XML情況下我把<foo>
放在我的提交消息中,結果XML將被破壞)。
逃避字符串不是Git的工作; git log
沒有任何東西可以幫助你做到這一點。 要實現你所追求的目標,你需要像sed
這樣的東西為你做字符串編輯。
試試這個(應該適用於大多數shell,但我只檢查過Cygwin bash):
function escape_chars {
sed -r 's/(\{\}")/\\\1/g'
}
function format {
sha=$(git log -n1 --pretty=format:%h $1 | escape_chars)
message=$(git log -n1 --pretty=format:%B $1 | escape_chars)
author=$(git log -n1 --pretty=format:'%aN <%aE>' $1 | escape_chars)
commit=$(git log -n1 --pretty=format:%cE $1 | escape_chars)
date=$(git log -n1 --pretty=format:%cD $1 | escape_chars)
echo "{\"sha\":\"$sha\",\"message\":\"$message\",\"author\":\"$author\",\"commit\":\"$commit\",\"date\":\"$date\"}"
}
for hash in $(git rev-list)
do
format $hash
done
上面將轉義{
和}
而不是\\
,雖然從JSON.org開始 , \\{
和\\}
都是無效的轉義; 只有\\
和"
需要被轉義。(用sed -r 's/("\\\\)/\\\\\\1/g'
替換sed
表達式以獲得真正的JSON輸出。)
雖然%cE
命令實際上給出了提交者的電子郵件地址,但我也保留了你的例子中的“commit”值。 我不確定這是不是你想要的。
我不知道如何只使用git log
來完成這個,但是一個簡單的其他解決方案是使用git log
生成類似CSV的輸出(使用制表符分隔的字段)並將此輸出傳遞給python腳本,該腳本處理JSON生成與正確的報價。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.