一个git仓库中可以有多个项目吗?

24

目前我是一个SVN用户,正在考虑将我的项目迁移到git。

我使用一个SVN仓库来保存我创建的所有项目。我的结构大致如下:

/
    /group1
        /subgroup1
            /project1
                /branches
                    ...
                /tags
                    ...
                /trunk
                    ...
            /project2
                ...
        /subgroup2
            /project3
                ...
            /project4
                ...
    /group2
        /subgroup3
            ...
        /subgroup4
            ...
    /lib
        /lib1
        /lib2
        /lib3

正如您所看到的,我将我的项目分组,/lib 包含在多个项目之间共享的库。

我选择这种排序结构的原因是:

  1. 我学习使用 SVN 的公司也使用了类似的仓库结构。
  2. 它允许我在我的机器上作为服务/守护进程运行 svnserve,并且所有项目都托管在它上面(我不喜欢文件路径方法)。

现在...说重点。我想知道:

如果我要转移到 Git,这种工作流程将如何运作?

具体而言:

  1. 将 repo 树迁移到 Git 是否简单?
  2. 假设每个项目都需要单独的 repo*,我如何能够通过 svnserve git 等效方法为它们提供服务(最好以类似的方式分组)。

*)我读过关于 Git 的相关信息,我理解这是情况,但我想向有经验的人再次确认。

3个回答

32
在 Git 中,最好将每个项目放在自己的仓库中,如果需要并且作为子模块(相当于 svn externals)在每个项目中使用,则将库放在另一个仓库中。这是因为在 Git 中,仓库是比 SVN 更轻量级的概念,更重要的是,没有能力单独克隆仓库中的文件夹(不要与稀疏检出混淆),就像您可以在 SVN 中检出和处理单个文件夹一样。因此,如果您将所有项目放在单个仓库中,您将不得不克隆它们全部。
使用智能 HTTP、Git 守护进程和 SSH 服务 Git 仓库非常简单。还有 Gitolite 用于管理多个仓库(包括授权和身份验证)。阅读关于 ProGit 上服务 Git 仓库的链接章节-http://progit.org/book/ch4-2.html 对于您的分组,您可以根据您的分组结构将仓库放在文件夹中,并使用智能 HTTP 方法进行服务,因此仓库 URL 将看起来像您在 SVN 中使用的 URL,所有项目似乎都在分组下。

我可能会去买这本书来更好地理解Git。我在想,将我的SVN仓库作为主要仓库,并使用Git进行本地源代码控制,这样做是否更有意义呢?我倾向于在多台机器上工作,所以我认为这样做是有道理的。 - Michal M
@Michal M 是的,许多人使用git-svn桥来实现这一点。实际上,这并不是一个坏选择。 - manojlds

6
除了其他答案之外,您还可以使用GitSlave将多个git仓库链接在一起。

2

你可以将所有项目放在一个仓库中,但这是一个非常糟糕的想法,因为你总是需要处理整个仓库。

如果只需要一个用户(你)来运行git服务器,则安装git和ssh访问的服务器就足够了。例如,请参见这篇文章


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