我工作的公司正试图摆脱集中式VCS StarTeam,并希望能够做得更好。我不想选择SVN,因为它是"简单的选项" (最类似于我们今天所做的)。有人可以帮助我了解每天更改大约150个文件的中型到大型开发团队如何在像Git或Mercurial这样的DVCS上运行吗?
我们有:
经过数天的研究和实验,我了解了Git和Hg的流程和工作流程。我不明白的是,需要进行更改的大型团队(通常是单个文件)很快就可以在系统限制下运行吗?
例如:我可能会处理3个不同的事情,开发人员会向我提出一个小问题。我做了一点研究,做了必要的1行更改,并检查了文件。据我所知,使用git我需要提交更改,隐藏所有其他更改,拉,推,应用存储,处理任何合并应用我的藏匿在最近拉出的代码可能存在。还有更好的方法吗?
我已经阅读过有关Facebook从Git转换为Mercurial的文章。他们如何在40,000个文件存储库中每天管理数千个签到?我无法理解DVCS的拉/推模型是如何工作的。对于这些系统的工作流程或功能,我一定会缺少一些东西。也许他们不需要每天拉/重基地?
感谢任何帮助。
答案 0 :(得分:2)
我希望,它将作为火焰战争来源迅速关闭,但是......
我不想选择SVN,因为它是"简单的选项"
打扰一下,你想要有成效地工作还是受苦?由于您的最后一个(不非常明确)要求,具有相当好的分支|合并的真实CVCS可能是比伪造的任何DVCS更好的选择(参见What does SVN do better than Git? fe) -CVCS模式
经过数天的研究和实验,我了解了Git和Hg的流程和工作流程。
相当粗略和浅薄的理解,BTW。即使在Git你也有
例如:我可能正在处理3种不同的事情
与VCS无关的共同方式(考虑到Mercurial,git-boys可能希望将其用于Git)
您创建了3个分支("基于任务的开发","每个任务分支"策略),每个分区提交了一些(任意)提交
开发人员向我提出了一个小问题
答案 1 :(得分:2)
我读过有关Facebook从Git切换到Mercurial的文章。他们如何在40,000个文件存储库中每天管理数千个签到?我无法理解DVCS的拉/推模型是如何工作的。关于这些系统的工作流程或功能,必须有一些我遗漏的东西。也许他们不需要每天拉/重基地?
首先,Facebook并没有以纯粹的DVCS方式使用Mercurial。他们使用remotefilelog extension(他们自己写的)只按需提取变更集(这是因为Mercurial存储历史记录,因此历史记录访问主要可以本地化)。他们还为他们的后端服务器use MySQL和memcached提高了可扩展性。
对于rebase / merge瓶颈(当数十个开发人员需要同时在主分支中集成他们的工作时),他们a work in progress feature主要在服务器端完成这项工作;我注意到这个瓶颈部分是(1)使用monorepo和(2)使用基于主干的开发的结果,这是一个并非每个大型组织都会遇到的问题。
例如:我可能会处理3个不同的事情,开发人员会向我提出一个小问题。我做了一点研究,做了必要的1行更改,并检查了文件。据我所知,使用git我需要提交更改,隐藏所有其他更改,拉,推,应用存储,处理任何合并应用我的藏匿在最近拉出的代码可能存在。还有更好的方法吗?
您可以使用新的Git工作树功能(或者,对于Mercurial,hg share
),可以对同一个存储库进行多次检出并独立处理它们。 Bazaar和Fossil一直都能够做到这一点; Fossil还具有自动同步功能,以类似SVN的方式运行(有警告),Bazaar一直能够以准集中的方式工作,提交直接进入服务器。特别是,“每个存储库只有一个结账”主要是一个历史性的Git工件,并不代表DVCS系统(并且,正如我所说,从最新的Git版本开始)。
那就是说,你通常要提交 - >拉 - >合并或变基 - >推动对主分支的更改;这是一个权衡。分布式模型允许您必须具有简单的本地版本控制,以便正在进行的工作在准备好之前不会直接进入主存储库。它通常还假设您的大部分工作都将在个人分支上进行,因此90%的时间它只是提交(偶尔推送)。
请注意,与集中式VCS相比,您不会有更多或更少的冲突;他们可能只是出现在不同的地方。
所有这一切,如果您对当前的VCS感到满意并且无法确定切换带来的明确好处,那么可能不值得更改您的VCS。切换VCS会产生可衡量的成本(重建您的回购,重新培训您的开发人员,调整工作流程,调整周围的工具,意外的过渡问题),这些成本需要通过同样可衡量的收益来抵消,以使它们变得有价值。
答案 2 :(得分:0)
我可能会处理3个不同的事情,开发人员会向我提出一个小问题。我做了一点研究,做了必要的1行更改,并检查了文件。据我所知,使用git我需要提交更改,隐藏所有其他更改,拉,推,应用存储,处理任何合并应用我的藏匿在最近拉出的代码可能存在。还有更好的方法吗?
是的:自Git 2.5起,你可以克隆一次你的回购,但结帐多次次。
如果创建新分支,则可以在单独的工作树文件夹中创建它,使当前环境不受干扰。