2016-02-11 173 views
0

我正在尋找一種方法在git中構建文件的完整歷史記錄,並訪問原始文件內容(與diff相對)。git - Blob/index文件歷史記錄

爲了做到這一點,我試圖獲得在blob在git中執行時生成的散列,然後我可以使用該散列來查找使用git add進行的原始文件內容。

我已經找到了一種通過查看完整的'原始'提交與 git log --raw得到上演哈希的方法。

但是,這爲我提供了一些我不需要的信息,例如作者,日期,提交消息。我希望能夠自己獲取文件名和散列,而不需要其他所有信息。我能夠使用正則表達式來修剪我想要的信息,但希望得到一個不需要修剪的解決方案,我希望有人可能會有一個git咒語來獲取這個信息。

commit 0fef32119a00ca59b24686257fdd7e056c0bcb1a 
Author: BenjaminWeber <[email protected]> 
Date: Thu Feb 11 20:17:04 2016 +0000 

commit message here 

:000000 100644 0000000... e69de29... A .deps 
:000000 100644 0000000... 68af6a7... A foo 
:000000 100644 0000000... 2372199... A bar 
+0

我知道git ls-files -s 爲目前正在上演的文件獲取散列,但我想要整個舞臺歷史不僅僅是當前舞臺 –

+0

這聽起來有趣,但它的方式不清楚你正在努力去做。 「完整的舞臺歷史」? –

+0

@andrewC我正在嘗試獲取文件的完整**內容**歷史記錄。 如果我有一個名爲'foo'的純文本文件,我已經修改了3次以上的提交,我希望能夠從每次提交中獲得文件的完整純文本內容。 爲了做到這一點,我試圖獲得爲'foo'生成的哈希,當它在git中進行時。 –

回答

0

沒有爲指在git help gitrevisions描述了舊版本文件的語法:

<rev>:<path>, e.g. HEAD:README, :README, master:./README 
    A suffix : followed by a path names the blob or tree at the given 
    path in the tree-ish object named by the part before the colon. 

可以使用git rev-list獲得相關修訂,並使用git show <rev>:<path>來顯示文件的內容在這一點上時間。

也許這是你想要什麼:

for hash in $(git rev-list HEAD -- .gitignore); do 
    echo $hash 
    git show $hash:.gitignore; 
done 

這顯示了HEAD的歷史.gitignore所有版本。