2009-10-01 50 views
2

我是一位目前從基因組文件中提取正常大小序列的生物信息學家。一些基因組文件足夠大,我不想將它們放到主要的git存儲庫中,而我將提取的序列放入git中。是否有可能在git中只存儲一個大文件的校驗和?

是否有可能告訴git「這是一個大文件 - 不要存儲整個文件,只要取其校驗和,並告訴我該文件是否丟失或修改。」

如果這是不可能的,我想我必須要麼git忽略大文件,要麼按照this question中的建議,將它們存儲在子模塊中。

回答

1

如何將散列存儲在文本文件中,然後將文本文件提供給git? 然後你可以編寫一個比較哈希值的鉤子,所以每當你簽入或簽出時,你都會被通知缺少/不同的東西。

不完全是你想要的,你仍然必須手動維護文本文件。

6

我寫了一個腳本來做這種事情。您可以將.gitattributes文件中的文件模式放入大型媒體中,而不需要在您的git倉庫中使用,並且可以將它們存儲在S3上。這只是一個起點,但如果你有興趣,我認爲它是可用的。

http://github.com/schacon/git-media

也許這會幫助你,或者至少你展示它是如何能夠做到,你可以自定義您的特定需求。

+0

亞馬遜S3不會是我的選擇(我們有點緊張讓數據的第三方)。您是否計劃在某個階段不使用第三方的選項? – 2009-10-01 23:20:45

+1

@Andrew:我修改了腳本以支持通過SCP在您自己的私人服務器上存儲文件,而不是在S3上。或者您可以將文件存儲在映射的網絡驅動器上。我也加快了一點。看到這裏http://github.com/davr/git-media – davr 2010-07-19 17:42:09

2

在Git中即將發佈的將有「refs/replace/」的機制,我認爲可以適用於這一目的(假定這種大的媒體文件的數量和它的版本號是不是非常大。 )

苗條叉你的項目,你將有(像Seth wrote)「存根」,以替代大型媒體文件,它作爲內容會對SHA-1的大文件的BLOB的文件(來自「 git hash-object -t blob <filename>「)。

然後在叉你的項目,你會使用「refs/replace/」機制(使用git replace)以取代真實內容的「存根」文件。需要一些掛鉤來將SHA-1保留在「存根」文件中,與實際的大型媒體文件保持同步。

然後,如果你想完整克隆,你也從「refs/replace/」命名空間;如果你想苗條克隆,你不會獲取「refs/replace/」。

注:我還沒有真正測試過這樣的設置;也是這不是混帳尚未公佈,除非你運行「主」

+0

非常酷!我不知道這件事。人們從哪裏得到這些信息? git郵件列表,Junio的博客?是否有某種宣傳服務,「本週在git.git」或類似Jon Masters的每日LKML摘要播客?我發現在Git中有時很難遵循新的功能,例如git-notes怎麼了? – 2009-10-01 17:12:52

+0

我看着git郵件列表,所以它是如何知道的。您可以改爲觀看RelNotes;關於'refs/replaces /'的信息在http://git.kernel.org/?p=git​​/git.git;a=blob;f=Documentation/RelNotes-1.6.5.txt中(所以它們在git版本1.6.5;我的錯誤) – 2009-10-01 18:51:26

+0

Errr ... git版本1.6.5是將要發佈的**下一個**版本(截至2009年1月10日) – 2009-10-01 18:52:55

相關問題