如何将大型二进制文件从main移动到git子模块?

时间:2011-11-28 15:20:31

标签: git branching-and-merging git-submodules

我在一个名为“视频”的目录中有一堆视频。我把那个不幸的大文件夹提交给git,导致git对某些活动(如克隆)变得非常慢。所以我做了一些研究并发现了git子模块,但我似乎并不太了解它们。

这就是我的所作所为:

  1. 我为ssh://dev.example.org/var/git/project/microsite_videos上的视频创建了一个单独的存储库,并将视频放在那里。
  2. 我在ssh://dev.example.org/var/git/project/microsite上删除了我主回购中的视频并提交了删除。我意识到这并没有从历史中删除视频,但我想确保在更改历史记录之前理解子模块。
  3. 我将视频作为子模块添加回来了:

    git submodule add ssh://dev.example.org/var/git/project/microsite_videos videos
    
  4. 我将这些更改提交给了主人。

  5. 这是我的.gitmodules文件:

    [submodule "videos"]
        path = videos
        url = ssh://dev.example.org/var/git/project/microsite_videos
    

    起初它似乎工作正常,但我对它的某些行为感到困惑。特别是,刚才我将master合并到一个分支中,视频文件夹就消失了。 .gitmodules文件仍然存在,但任何拉动或更新视频文件夹的尝试只会给我一个新的提示,而不会做任何事情。

    我做错了什么,怎样才能提高对子模块的理解,这样每次尝试分支和合并时都不会挣扎?

1 个答案:

答案 0 :(得分:0)

不要忘记子模块只是指向特定仓库的特定提交的指针 请参阅“Git submodules: Specify a branch/tag”。

这意味着,在合并之后,您仍然拥有指针(在.gitmodules中并作为树中的特殊条目),但您需要git submodule update才能刷新子模块内容。
如果更新失败,请参阅“Git submodule head”。