我是一名生物信息学家,目前从基因组文件中提取正常大小的序列。一些基因组文件足够大,我不想将它们放入主 git 存储库,而我将提取的序列放入 git。
是否可以告诉 git “这是一个大文件 - 不要存储整个文件,只需获取它的校验和,如果该文件丢失或修改,请告诉我。”
如果那不可能,我想我将不得不 git-ignore 大文件,或者按照这个问题的建议,将它们存储在一个子模块中。
我是一名生物信息学家,目前从基因组文件中提取正常大小的序列。一些基因组文件足够大,我不想将它们放入主 git 存储库,而我将提取的序列放入 git。
是否可以告诉 git “这是一个大文件 - 不要存储整个文件,只需获取它的校验和,如果该文件丢失或修改,请告诉我。”
如果那不可能,我想我将不得不 git-ignore 大文件,或者按照这个问题的建议,将它们存储在一个子模块中。
我写了一个脚本来做这种事情。您将文件模式放在 .gitattributes 文件中,用于您不想进入 git 存储库的大型媒体,它可以将它们存储在 S3 上。这只是一个起点,但如果您有兴趣,我认为它是可用的。
http://github.com/schacon/git-media
也许这会对您有所帮助,或者至少向您展示如何完成它,并且您可以根据您的特定需求对其进行自定义。
在即将发布的 git 中会有 ' refs/replace/
' 机制,我认为可以针对此目的进行调整(假设此类大型媒体文件的数量及其版本的数量不是很大。)
在您项目的细长分支中,您将拥有(如Seth 所写git hash-object -t blob <filename>
的)“存根”文件来代替大型媒体文件,其内容将具有大文件(来自“ ”)的 SHA-1 。
然后在您的项目的完整分支中,您将使用“ refs/replace/
”机制将那些“存根”文件替换为真实内容(使用git replace)。需要一些挂钩来使“存根”文件中的 SHA-1 与实际的大型媒体文件保持同步。
然后如果你想要完整的克隆,你也可以从“ refs/replace/
”命名空间中获取;如果您想要苗条的克隆,则不要获取“ refs/replace/
”。
注意: 我还没有实际测试过这样的设置;这在 git 中还不可用,除非你运行'master'
如何将哈希值存储在文本文件中,然后将文本文件提供给 git?然后你可以写一个比较哈希的钩子,所以每次你签入或签出时,你都会被通知缺少/不同的内容。
不完全是您想要的,您仍然需要手动维护文本文件。