轉義字符串不是Git的工作; git log
沒有任何東西可以幫助你做到這一點。爲了實現您的目標,您需要使用類似sed
的字符串來爲您進行字符串編輯。
試試這個(在多數殼工作,但我只在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
命令實際上給出了commiter的電子郵件地址;我不確定這是你的意圖。
(現在這包括correct but rejected edit通過macrobug。謝謝!)
你應該使用'git的REV-list'的腳本 – knittl 2012-02-21 11:59:13