2013-10-16 47 views
1

我在所有提交的是在使用Python腳本和dulwich庫的計劃進行一個Git倉庫。git的日誌格式打印日期空

我想打印出他們提交日期提交的名單,利用git log格式自定義,但我不能找到一個格式字符串的作品。

這是我得到一個承諾,當我運行git log --format=raw

commit d955a72160fdacfc7c22eccdccaf8b343c882ebb 
tree d6b8baffb86d16b90552250da7bfe39828d16982 
parent 03bccd572a8ed7e04c96bf27a010d7ef39165e1c 
author auto.py 1381493109 +0000 
committer auto.py 1381493109 +0000 

    commit message 

與此相比,在所有的提交已被實際的Git工具創建的回購協議,還與--format=raw

commit 72dbd4358c8685cfd604b4146c7728c82999a97e 
tree cfc5254c5f96b50ec6b5abf1b573e97989a52b19 
parent 2f2a87f7f1e87afe1b93d659e4cd435532352ada 
author me <[email protected]> 1381503599 -0300 
committer me <[email protected]> 1381503599 -0300 

    commit message 

使用git log --format文檔,我構建了一個格式字符串,應該表現出作者&提交日期在每一個格式,通過提交哈希包圍兩側。然後我跑它的德威管理回購:

$ git log --format="format:%h %an %ad %aD %ar %at %ai %cn %cd %cD %ar %at %ai %h" 
d955a72    d955a72 

而對於Git的管理回購:

$ git log --format="format:%h %an %ad %aD %ar %at %ai %cn %cd %cD %ar %at %ai %h" 
72dbd43 me Fri Oct 11 11:59:59 2013 -0300 Fri, 11 Oct 2013 11:59:59 -0300 5 days ago 1381503599 2013-10-11 11:59:59 -0300 mRB0 Fri Oct 11 11:59:59 2013 -0300 Fri, 11 Oct 2013 11:59:59 -0300 5 days ago 1381503599 2013-10-11 11:59:59 -0300 72dbd43 

每日期爲空字符串。我想dulwich存儲提交日期不同,但我找不到任何方式來訪問它們的格式字符串。

有沒有我可以git log使用任何自定義格式來訪問德威提交的時間戳?

我使用git 1.8.3.4版本(Apple Git-47)。

+0

@AntoinePelisse糟糕!我包括錯誤的提交。只是做了另一個'git log --format = raw'並更新了我的問題 - 現在兩者更加類似。 – mrb

+0

是的,我相信這證明了我的答案。你可以看看這個:https://github.com/gitster/git/blob/master/ident.c#L201 –

+0

你也可以嘗試在倉庫中運行'git fsck'。我相信它會在* unparsable提交*中顯示錯誤。 –

回答

1

我認爲由dulwich創建的提交是無效的,因爲作者和提交者的電子郵件地址在Git中始終是強制性的(解析器正在尋找包含<>)。解析作者/提交者標識導致不解析時間戳。

+0

是的,Dulwich應該可能驗證指定的作者/提交者值是否有效,如果不是,則會引發異常,而不是一味地寫入磁盤。 – jelmer

0

安託萬斗篷,腦袋挺大的答案是正確的:我提交在他們的作者/提交者記錄沒有電子郵件地址,所以他們是無效和git不能解析它們進行格式化。

我能夠通過在工作目錄中執行以下過濾器來修復我的存儲庫。請注意,這將更新所有承諾無條件作者:

git filter-branch --env-filter " 
GIT_AUTHOR_EMAIL='[email protected]' 
GIT_COMMITTER_EMAIL='[email protected]' 
GIT_AUTHOR_NAME='auto.py' 
GIT_COMMITTER_NAME='auto.py' 
" 

幸運的是,git的維護作者和上述過濾過程中提交的日期。 (上Git版本1.7.2.5和Git版本驗證1.8.3.4(蘋果的Git-47))

爲了避免這個問題在未來的承諾,我通過德威提交時提出了以下變化:

# old: do not use 
# repo.do_commit("message", committer="auto.py") 

# fixed 
repo.do_commit("message", committer="auto.py <[email protected]>") 

在上述之後,我的git log格式字符串正常工作。

+0

我不明白爲什麼德威公司使它與cgit不同:作者姓名和作者電子郵件是通過git連接的兩個不同的東西,但在這裏你必須格式化自己。 –