2016-02-11 175 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所有版本。