2016-12-04 21 views
1

我正在嘗試使用nodegit將git作爲內容的數據庫。因此,我正在編寫訪問回購庫中內容的函數。我能夠檢索文件blob和其他有關給定文件的信息,但我很努力獲取時間戳信息。使用nodegit,我怎樣才能找到一個給定的文件在git倉庫中上次更新的日期?

我想得到1)創建文件的日期,2)上次更新的日期。但到目前爲止,我還沒有弄清楚這是怎麼可能的。

爲了獲取文件,我需要遵循以下步驟:

1)使用getMasterCommit檢索最新Commit
2)從Commit,使用getEntry獲取文件TreeEntry
3)從TreeEntry,得到各種元數據,然後得到BlobgetBlob
4)從Blob,獲取其他元數據加上文件的原始文本。

問題是,我能找到的日期的唯一地方是Commit,它有date函數。這可能有助於獲取上次更新的日期,但它實際上沒有幫助,因爲它僅返回Commmit(顯然!)的日期,但尚不清楚該文件是否針對該提交進行了更新。

我也想能夠得到給定文件創建的日期。我可以想象,通過回顧給定的TreeEntry的提交歷史記錄,可能會得到這個結果,但目前還不清楚這是如何完成的。事實上,能夠搜索給定文件的提交歷史記錄可能是這裏需要的。但我一直無法看到這是否可能。

任何人都可以提供指導嗎?

回答

1

您可以使用rev walker來走歷史,就好像您在做git log一樣。看一下這個例子:https://github.com/nodegit/nodegit/blob/master/examples/walk-history-for-file.js

隨着fileHistoryWalk,你可以過濾文件來找到你感興趣的文件,然後得到最早的文件。

+0

我看過了這些代碼。混淆了一下。爲什麼'fileHistoryWalk'多次調用該文件,首先在第49行,然後再次在第34行?爲什麼將'fileHistoryWalk'調用的初始結果視爲文件的歷史記錄是不夠的? – fraxture

+0

我相信它是以500批次的形式進行的,看起來像API需要一個最大數量。我會試驗一下,看看它是否得到你想要的。 – yelsayed

1

您可以iterate through each file並參見
commit-hash date-time commit-message user file-name。使用終端在repo中運行以下命令。

$ git ls-tree -r --name-only HEAD | while read filename; do 
echo "$(git log -1 --format="%h %ad- %s [%an]" -- $filename) $filename" 
done  

樣本輸出:

6ea69fa Sun Nov 20 04:29:08 2016 +0600- commit-message-1 [user-1] c.txt 
f83fad2 Thu Oct 27 00:14:37 2016 +0600- commit-message-10 [user-4] b.txt 
b5356e3 Mon Oct 31 14:55:43 2016 +0600- commit-message-7 [user-2] a.txt 
+0

@fraxture它適合你嗎? –

+0

只是看到它。這很有趣,但我試圖用nodegit解決它,而不是CLI。可以提供提示,但。 – fraxture

相關問題