git如何将特定子文件夹标记为分支

时间:2013-02-21 10:18:54

标签: git git-branch subdirectory

最近我使用git-svn从SVN迁移到GIT。

checkeded out代码的实际大小约为24GB。 在GIT中,目前我只看到一次分支为origin/master。因此,如果每个开发人员克隆主人,他需要每次拉24GB,这真的很痛苦。

因此,我需要将一些现有位置标记为分支,以便可以直接检出这些位置,而不是完整的回购。

项目回购结构如:

/Docs/
/project-maintainance/
/main-project/
             /module1
                    /branch1  
                    /branch2  
             /module2
                    /branch1  
                    /branch2
                    /branch3

现在,要完成此任务,我想将某些特定文件夹标记为分支,而不是创建新分支。我浏览了这么多网页,但只是因为我是初学者而增加了我的困惑。

如何从子文件夹而不是顶级文件夹创建分支?

编辑:现在我的目标是能够checkout multiple subtrees, push and pull changes.

1 个答案:

答案 0 :(得分:0)

不幸的是,git不是这样的,因为它是distributed version control system (DVCS)。这意味着您拥有代码的完整副本,而不仅仅是其中的一部分。

但是,可以执行所谓的shallow clone。例如:

git clone <repo> --depth 1

这种方法有各种警告 - 你可以找到更多的讨论here

最终,24GB对于git repo来说非常大。事实上,我以前从未听说过如此庞大的存储库。可能值得研究尝试使用filter branch命令大幅减小它的大小。

我写了一个Ruby gem - 它仍处于早期开发阶段 - 它提供了一些关于git存储库的基本统计信息,例如历史记录中的大文件(不再是working copy中的大文件)适合使用filter branch删除的候选人。

另一种选择可能是将您的单个存储库拆分为多个存储库。我不强烈推荐这个,因为我不知道你的代码如何组合在一起,但有a great discussion here