我是生物信息学家,目前从基因组文件中提取正常大小的序列。一些基因组文件足够大,我不想将它们放入主git存储库,而我将提取的序列放入git。
是否有可能告诉git“这是一个大文件 - 不存储整个文件,只需取其校验和,并告诉我该文件是否丢失或修改。”
如果那是不可能的,我想我必须要么忽略大文件,要么按照this question中的建议将它们存储在子模块中。
答案 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? 然后你可以编写一个比较哈希的钩子,所以每次你签入或签出时,你都可以收到丢失/不同的通知。
不完全是您想要的,您仍然需要手动维护文本文件。