2010-08-07 42 views
2

我有一個文件已被安裝在我的系統上,該文件已知是git回購的一部分。我想知道哪些提交(重新)引入了該文件的版本,即哪個提交負責將文件置於當前狀態。正在搜索引用給定對象的提交

我知道該文件在回購中,因爲git show $(git hash-object $the_file)有效。

在這一點上,我並不真的需要這個示例問題的解決方案,我只是希望更多地瞭解如何瀏覽git的數據結構。

+0

可能重複[Git:哪個提交有這個blob?](http://stackoverflow.com/questions/223678/git-which-commit-has-this-blob) – Cascabel 2010-08-08 01:41:17

回答

0

git log <the file>怎麼樣?

+0

這會告訴我哪個提交引入了*文件的當前版本*。它還要求我知道源文件位於repo的哪個位置,並且我認爲它還沒有經過重寫,從而防止git將它的某個修訂標識爲副本。 – intuited 2010-08-07 20:30:55

1

如果當前版本引入了一個特定的comportement,您可以測試(通過單元測試程序,shell腳本等),您可以使用git bisect工具來查找對此comportement負責的提交。

下面是這個命令的手冊:http://www.kernel.org/pub/software/scm/git/docs/git-bisect.html

+0

有趣的想法,但在這種情況下,回購沒有可以測試程序的«行爲»的工具集,我不確定該文件的任何修訂本應該做什麼。無論如何,我更關心如何遍歷git數據結構,而不是解決這個特定問題。 – intuited 2010-08-08 03:47:11

0

使用git hash-object <file>,然後用git log --raw -- <file>獲取的文件的特定版本的哈希值,並通過尋呼機搜索(這是「/」在「少」和「更')爲這個散列。

1

感謝@Jefromi指出重複。由於這個問題並沒有作爲重複被關閉,所以我將在其他線程上參考accepted answer來回答它,該線程包含一個perl腳本,這個腳本似乎只是我想要的,並且或多或少具有最佳效率。