请帮助老 SVN 手理解 GIT 术语

Please Help an old SVN-hand understand GIT terminology

我是一个 SVN 老手(在 CVS 老手之前)试图理解 Git。我正在尝试使用 Git 将一些代码置于源代码管理之下,但我很难决定如何组织这些东西。请回答以下问题来满足我:

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

So we first recommend that each project have a recognizable project root in the repository, a directory under which all of the versioned information for that project—and only that project—lives. (emphasis mine).

存储库因此被认为是多个项目所在的地方。尽管提到了存储库可能只包含一个项目的可能性:

Of course, if a repository houses only a single project, the root of the repository can serve as the project root, too.

但这不是主要用例,根据我的经验,我从未这样做过。

存储库创建很困难,通常与特定硬件(即服务器)相关联。

在git中,虽然没有提到"project"的概念,"repository" Git的意思更像是我认为的项目。存储库无处不在,其中一个可能是中央存储库,但典型的文档似乎想象普通用户在他的机器上会有多个存储库,并且这些存储库可能与一台或多台服务器上的多个存储库相关联。例如,命令 "git init" 将目录转换为存储库!没有比这更容易或更令人困惑的了!

我整天都在为这个问题苦思冥想,但我真的很想了解这里的哲学。我知道这不是现在 Stack Overflow 喜欢的问题,但我不确定还能在哪里回答。

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

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

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


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

意味着您不会拥有一个中央存储库。你几乎肯定会。但是因为从Git的角度来看并没有什么特别的,所以没有给它起什么特别的名字。

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

Github's article on the subject seems like it would be a good place to start and git-scm.com's documentation 是个不错的下一站。

不过,真的,除了投入、尝试和阅读内置文档(比以前好多了),没有什么可以替代的。我建议从 git help config 开始,然后看看它会把你带到哪里。

我只是在已经说过的内容之外再补充一条信息。 要将一组项目收集在一起,您可以使用子模块的概念 它用于保存存储库中另一个存储库的引用(位置+修订)。 例如,假设您有现有的 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

然后您可以将不同项目的不同修订聚合成连贯的东西。