使用中央仓库是否违背了GIT的目的?

33
如果您在一个企业环境中,有很多人在特定的应用程序上工作,那么拥有一个官方的中央存储库是否违反了分布式版本控制系统的原则?
有时我很难理解在企业环境中使用GIT这样的分布式版本控制系统的概念。如果没有中央存储库,那么找出谁拥有最新的更新版本、谁拥有每个人都需要获取的功能x或错误修复y等等,不是非常麻烦吗?
使用类似于SVN的中央存储库让每个人推送/拉取代码,这是否会背离GIT的目的?每次我考虑这样做时,我感觉自己错过了一切。
有人能给我解释一下吗?
7个回答

29

并不是完全如此。分布式版本控制系统(DCVS)只是允许开发者在互相交流时不需要涉及到中央代码库,而官方代码库只是通过共识形成的“官方”。Linux也有一个中央代码库,从中创建了“官方”内核发布版本,但与集中式版本控制系统不同,中央“官方”代码库和客户端代码库之间没有实际上的物理区别。


2
共识...或政策,但是,是的,你在这里强调了关键点。 - Draemon

29

您可能正在思考这样的图表:

alt text

相较于CVCS,这看起来可能会比较混乱。我听到你说:“我们需要一些秩序?"

 

如果没有中央代码库,想要找出最新更新版本的人、谁有大家都需要获取的功能x或错误修复y,似乎就很麻烦了。

是的,与CVCS不同,没有真正的“最新版本”。如果没有中央位置,您无法立刻知道最新版本是由Sue、Joe还是Eve提供的。中央位置有助于澄清最新的“稳定”版本。

可能更像这样:

alt text

值得注意的是,在组织内部,可能会有更多被认为是中央代码库的地方,这取决于人员组的职责。

想象一下管理多个开发团队的项目经理,每个团队可能有一个他们推送的“中心”代码库。每周,项目经理可能会从每个团队拉取更改到他的“中心”代码库中,合并它们并将它们重新推送到他的团队的“中心”代码库中。

这可能不是一个很好的例子(我仍在努力理解所有这些内容),但那只是一个项目经理。再加上几个项目/经理和QA团队,你也许就能知道我在说什么了。

--


8

通过分布式源代码控制,中央“官方”存储库是根据政策建立的,而不是源代码控制工具的架构。


6

绝对不会违背Git的目的。

即使存在一个中央官方仓库,使用Git或任何其他分布式版本控制系统的优点仍然在于源代码控制是分散的。也就是说,你可以拿到仓库的副本,在你的代码上工作,并且每隔几分钟做一次本地提交。你不需要担心提交的是半成品代码,导致构建失败,这都是本地的。(而且非常快。)

然后当所有工作都完成时,你可以清理历史记录,并将完成的更改推送到中央仓库中,使其保持同质化和干净状态。

我认为你不能低估将“私有”提交和“公共”推送的想法分开的优点。即使只有你从这种小粒度中受益,也可以跟踪更改。


4
如果您查看此Git演示文稿(第475页及以下),Git完全支持中央仓库模型。
您可以强制任何希望git push其开发的人首先进行git fetch + git merge,然后再推送。
这并不完全打败Git的目的,并确保每个人都“同步”。
与Linus的“官方”存储库由JesperE提到的区别在于,它由不同的工作流程管理,即“独裁者和副手”模型,其中写入访问权限(推送)仅授予Linus,读取则授予任何人。
现在:“那是否违背了DVC的要点”?
不,您仍然拥有分布式存储库,每个开发人员一个,他们可以根据自己的内部团队工作流程在自己的存储库之间进行提取/合并。
但是,如果他们想要为中央存储库做出贡献,他们需要首先了解该存储库的最新历史记录。

我知道可以这样使用,但是我应该吗?这种“当你只有一把锤子时,所有东西看起来都像钉子”的事情...我是不是完全错过了DVC的重点? - mmcdole
使用分布式版本控制系统(DVCS),不存在中央仓库。或者说,每个仓库都是中央的。选择吧,或者不选也可以。这完全取决于你自己。 :) - Bombe

1
DVCS 的主要好处之一是您可以从“官方”存储库获取最新版本,然后进行冒险。您可以在本地提交更改并随意回滚。这也意味着即使没有访问中央存储库,您仍然可以工作并获得源代码控制的好处。
我认为只要有点纪律,这个模型就非常有效。本文 很好地解释了您可以采用的各种模型。

0

像Git这样的分布式版本控制系统并不强制使用中央仓库。当然,可以将一个仓库声明为“中央”、“官方”或其他名称,在公司环境中,中央仓库在某种程度上是有意义的——如果不是用于开发,至少也是用于备份目的。


我不认为那真正回答了问题 :) 他并没有问你是否能够,只是问你是否应该。我认为答案是“是”。 - Will Robertson
嗯,是的,当你只考虑黑白问题时,你可能可以对这样的问题给出一个清晰的答案。任何有更广阔视野的人可能会回答“取决于情况”。 - Bombe
好的,有客观原因使得即使在集中式环境下,使用Git也比SVN更加舒适。当然,这只是故事的一面 :) - Will Robertson

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