请帮助旧的SVN手理解GIT术语

时间:2015-03-24 21:47:19

标签: git svn

我是一个老SVN手(在那之前的CVS手)试图理解Git。我试图使用Git将一些代码置于源代码控制之下,而且我很难决定如何组织事情。请回答以下问题,放纵我:

在SVN中,存储库通常包含多个项目。在SVN手册中,它说

  

因此,我们首先建议每个项目都有一个可识别的项目   root在存储库中,所有版本化的目录   该项目的信息 - 且仅该项目 - 生活。   (强调我的)。

因此,存储库被视为多个项目所在的地方。虽然提到了存储库可能只包含一个项目的可能性:

  

当然,如果一个存储库只包含一个项目,那么它的根目录就是   存储库也可以作为项目根目录。

但这不是主要的用例,而且我从来没有这样做过。

存储库创建是硬的,通常与特定的硬件相关联,即服务器。

然而,在git中,"项目"没有提到概念,并且" repository" Git想要更像我认为的项目。整个地方都有存储库,其中一个可能是核心,但典型的文档似乎可以想象普通用户将在他的机器上拥有多个存储库,这些存储库可能与一个或多个服务器上的多个存储库相关联。例如,命令" git init"将目录转换为存储库!没有什么比这更容易了 - 或者更令人困惑!

我整天都在讨论这个问题,但我真的很想理解这里的哲学。我知道这不是Stack Overflow最近喜欢的那种问题,但我不确定在哪里可以接受它。

我正在寻找的是一份冷静地解决这个问题的文件。

3 个答案:

答案 0 :(得分:1)

在分布式版本控制系统中,存储库是提交单元和分支单元。所以它包含分支在一起的东西,它对应于Subversion中的“project”。

Subversion允许在任何子目录级别进行分支,但这会增加很多复杂性。分布式系统使用整个存储库的非线性历史记录进行分支,但这意味着只能在存储库级别进行分支。因此,在一个存储库中放置一个项目。


分布式系统也是分布式。它的“存储库”是指存储项目历史副本的任何地方,包括每个工作目录。

意味着您不会拥有一个中央存储库。你几乎肯定会。但是因为从Git的角度来看它并没有什么特别之处,它没有任何特殊名称。

对于拥有多个此类中央存储库的地方,它也没有任何特殊名称,因为它不关心它是否是一个地方。通常它简称为“(中央)服务器”。

答案 1 :(得分:1)

关于这个主题的{p> Github's article似乎是一个好的开始,git-scm.com's documentation将是一个很好的下一站。

但实际上,没有什么可以替代潜水,尝试并阅读内置文档(这比以前好多了)。我建议从git help config开始,看看你需要的地方。

答案 2 :(得分:0)

我只是添加了一条超出已经说过的信息。 要一起收集一组项目,您可以使用子模块的概念 用于在存储库中的另一个存储库中保存引用(位置+修订)。 例如,假设您有project1和project2 git存储库,您可以执行以下操作:

$ mkdir metaproject
$ cd metaproject; git init
$ mkdir project1 project2
$ git submodule add <path to project1> project1
$ git submodule add <path to project2> project2

然后,您可以将不同项目的不同修订汇总为一致的内容。