Git的类比物是Hg的Bigfiles扩展吗?

6

我希望在git中有类似于Mercurial的Bigfiles扩展的东西(注意:我知道git-bigfiles,但那与此无关)。

基本上,我想在我的git仓库中存储大型二进制文件,但我不想在克隆时获取每个版本的大型二进制文件。我只想在检出包含这些大文件的特定修订版本时下载这些大型二进制文件。

1个回答

5
以下是一些可供考虑的选项: 浅克隆: 您可以在 git clone 命令中添加 --depth <depth> 参数,以获取存储库的浅克隆。例如,如果 <depth> 为 1,则意味着该克隆将仅获取最近提交所需的文件。但是,这种存储库有一些限制,如 git clone 手册中所述:
        --depth 
           创建一个浅克隆,其历史记录被截断到指定的修订次数。浅存储库有许多限制(您不能从中克隆或提取,也不能从其中推送或推入),但如果您只对具有悠久历史的大型项目的最近历史感兴趣,并且想要发送修复程序作为补丁,则它足够了。

实际上,正如在此线程中所讨论的那样,这有点言过其实 - 在某些情况下,从浅克隆中推送仍然有效,而且可能适合您的工作流程。

Scott Chacon 的 "git media" 扩展:作者在此类似问题的回答中和 github 上的 README 中描述了这一点:http://github.com/schacon/git-media浅子模块: 您可以将所有大文件存储在单独的 git 存储库中,并将其作为浅子模块添加到主存储库中。这样做的优点是您的代码不会受到浅克隆的限制,只有包含大文件的存储库受到限制。

还有许多通过添加挂钩来完成的方法(例如从 git 挂钩中 rsync 大文件),但我认为您希望首先将这些文件纳入 git 的控制下有很好的理由。

希望这对您有所帮助。


git-media 看起来正是我想要的,但它还没有完全完成。不过我认为我通过一些小技巧让它工作了。现在我只需要编写支持将文件上传到我想要的位置的代码即可。 - davr
为了以后的参考,这是我对git-media的分支,其中包含一些必要的更改:http://github.com/davr/git-media - davr
太好了,看起来非常有用!另外值得一提的是,这个帖子(尤其是第一封邮件中链接的幻灯片)对于Git处理大文件的主题非常有趣。http://git.661346.n2.nabble.com/Git-and-Media-repositories-td1446700.html - Mark Longair
哇...看来 Ruby 真的很糟糕。我将 'filter' 脚本从 Ruby 移植到了 Bash shell 脚本,现在它运行速度快了约 20 倍(当运行 'git status' 时不再有 10 秒的延迟,现在只需要半秒钟左右。更加可用了)。 - davr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接