是否可以在git中仅存储大文件的校验和?

时间:2009-10-01 01:37:22

标签: git large-files

我是生物信息学家,目前从基因组文件中提取正常大小的序列。一些基因组文件足够大,我不想将它们放入主git存储库,而我将提取的序列放入git。

是否有可能告诉git“这是一个大文件 - 不存储整个文件,只需取其校验和,并告诉我该文件是否丢失或修改。”

如果那是不可能的,我想我必须要么忽略大文件,要么按照this question中的建议将它们存储在子模块中。

3 个答案:

答案 0 :(得分:6)

我编写了一个执行此类操作的脚本。您将文件模式放在.gitattributes文件中,用于您不希望进入git repo的大型媒体,它可以将它们存储在S3上。这只是一个起点,但我认为如果您感兴趣,它可以使用。

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

也许这会对您有所帮助,或至少告诉您如何完成它,您可以根据自己的特定需求进行自定义。

答案 1 :(得分:2)

在即将发布的git中会有'refs/replace/'机制,我认为可以为此目的进行调整(假设此类大型媒体文件的数量及其版本的数量不是非常大。)

在项目的苗条分支中,您将拥有(例如Seth wrote)'stub'文件来代替您的大型媒体文件,其内容将具有SHA-1 blob的大文件(来自“git hash-object -t blob <filename>”)。

然后在项目的完整分支中,您将使用“refs/replace/”机制用真实内容替换这些“存根”文件(使用git replace)。需要一些钩子来保持“存根”文件中的SHA-1与实际的大型媒体文件同步。

然后,如果你想要完整克隆,你也可以从“refs/replace/”命名空间获取;如果您想要苗条克隆,则不会获取“refs/replace/”。

注意: 我实际上没有测试过这样的设置;除非你运行'master'

,否则git中还没有这个功能

答案 2 :(得分:1)

如何将哈希值存储在文本文件中,然后将文本文件提供给git? 然后你可以编写一个比较哈希的钩子,所以每次你签入或签出时,你都可以收到丢失/不同的通知。

不完全是您想要的,您仍然需要手动维护文本文件。