来自mercurial,我使用分支来组织功能.当然,我也想在我的历史中看到这种工作流程.
我使用git开始了我的新项目并完成了我的第一个功能.合并该功能时,我意识到git使用快进,即如果可能,它会将我的更改直接应用到主分支并忘记我的分支.
因此,思考未来:我是唯一一个从事这个项目的人.如果我使用git的默认方法(快进合并),我的历史将导致一个巨大的主分支.没有人知道我为每个功能使用了一个单独的分支,因为最后我只有那个巨大的主分支.这看起来不专业吗?
通过这种推理,我不想要快进合并,也不知道为什么它是默认的.这有什么好处的?
我们公司目前正在使用简单的主干/发布/修补程序分支模型,并希望了解哪些分支模型最适合您的公司或开发过程.
工作流程/分支模型
以下是我所看到的三个主要描述,但它们彼此部分相互矛盾,或者不足以解决我们遇到的后续问题(如下所述).因此,我们的团队到目前为止默认不是那么好的解决方案.你做得更好吗?
合并与变基(纠结与连续历史)
是应该pull --rebase还是等待合并回到主线直到你的任务完成?我个人倾向于合并,因为这保留了一个任务开始和完成的基础的视觉图示,我甚至更喜欢merge --no-ff这个目的.然而,它有其他缺点.还有许多人没有意识到合并的有用属性 - 它不是可交换的(将主题分支合并到master中并不意味着将master合并到主题分支中).
我正在寻找一个自然的工作流程
有时会发生错误,因为我们的程序无法通过简单的规则捕获特定情况.例如,早期版本所需的修复当然应该足够下游,以便可以将上游合并到所有必要的分支中(这些术语的使用是否足够清楚?).然而,在开发人员意识到它应该被放置在更下游之前,并且如果已经推送(更糟糕的是,合并或基于它的某些东西)之后,修复使其成为主人,那么剩下的选项就是挑选,其相关的危险.您使用了哪些简单的规则?同样在这包括一个主题分支的尴尬必然排除其他主题分支(假设它们从共同基线分支).开发人员不希望完成一个功能来启动另一个功能,感觉就像他们刚写的代码不再存在
如何避免创建合并冲突(由于挑选)?
创建合并冲突的可靠方法似乎是在分支机构之间进行挑选,它们永远不会再次合并?在任一分支中应用相同的提交(如何执行此操作?)可能会解决这种情况?这是我不敢推动基于合并的工作流程的一个原因.
如何分解成外用分支?
我们意识到从主题分支组装完成的集成是很棒的,但是我们的开发人员经常工作没有明确定义(有时像"戳"一样简单),如果某些代码已经进入"misc"主题,根据上面的问题,它不能再被带出去了吗?您如何使用定义/批准/毕业/发布您的主题分支?
代码审查和毕业等适当的程序当然是可爱的.
但是我们根本无法保持足够的东西来管理这个 - 任何建议?整合分支,插图?
以下是相关问题列表:
还要看看Plastic SCM在任务驱动开发上写的内容,如果不是Plastic的选择,请研究nvie的分支模型及其支持脚本.
我想在使用vcs或dvcs时学习其他人的工作流程.
请描述您处理以下任务的策略:
您可以随意组织您的答案,不按任务分组,但按照您认为相关的任何分组,但请通过VCS/DVCS进行组织(请不要混用它们).
谢谢.
这是我早期的问题 "如何使用mercurial管理并发开发" 的表亲问题,该问题涵盖了各个开发人员的工作流程.这个问题的答案实际上会影响开发人员工作流程的选择.
这不是一般的"版本管理最佳实践"或CI问题,因为它已经被问 很多 次有很好的答案,而且也可用来消磨时间的文学庞大的身躯.
我只是要求在发布管理的上下文中使用mercurial的具体方法.
最明显和最主要的答案应该是稳定的/默认的,这完全由@Steve Losh 的漂亮博客覆盖,并且在他的回答中更简洁.它简单而有效.
这种设置的一个突出例子是hg本身.hg使用更多的存储库进行主动开发,但是出于管理目的,一切似乎都包含在主repo的stable/default分支中.
hg设置实际上表示稳定/默认的变体,或者更确切地说是扩展版本:分支克隆.我在回答关于命名分支与多重回购的问题时描述了这个过程(来自@Martin Geisler的另一个很好的答案).在我的回答中我忘记提到的是分支克隆如何为开发人员工作流程工作:如果你需要修复分支的bug,你可以hg clone <main repo>#<branch>但不是分支克隆,因为你的变更集仍然会回到主仓库并推出自动分支克隆.当然,您可以选择不克隆并仅hg update <branch>在主克隆中,但是大多数使用单独克隆的参数(尤其是独立构建)都适用于此处.
现在回到问题:是否有其他方法适合不同的现实场景?例如,传统的主要/次要/补丁发布周期与版本之间的长时间推移可能需要完全不同于快节奏,即用即发的Web应用程序.如果您愿意,还请评论稳定/默认和分支克隆方法.
由于这几乎是一个调查问题,我只能主观地接受"最佳"答案.如果我能得到比我的开发人员工作流程问题更多的答案,那就是.
感谢您的所有投入!
正如标题所暗示的那样,我很好奇为什么有这么多人吹捧Git作为分支/合并SVN的优秀替代品.我主要是好奇,因为SVN合并很糟糕,我想要一个替代解决方案.
Git如何更好地处理合并?它是如何工作的?
例如,在SVN中,如果我有以下行:
你好,世界!
然后user1将其更改为:
Hello World!1
然后user2将其更改为:
Hello World!12
然后user2提交,然后user1提交,SVN会给你一个冲突.Git可以解决这个简单的问题吗?
我知道有数千个相似的话题浮出水面.我在这里读了至少5个线程但是为什么我仍然不相信DVCS?
我只有以下问题(注意我只是自私地担心Java项目)
推我!
在明确的案例术语中,集成流和集成视图之间有什么区别?发展流和发展观?
更具体地讲,为什么" 加入一个UCM项目 "涉及创建既融合和发展的意见?

如果我是开发人员,而不是集成商,那么只有一个观点足够吗?
我正在做一些初步的工作,研究DVCS(像Git,Hg,Bazar这样的人)如何在科学编程过程中提供帮助,尤其是研究生.我认为自从我编程了几年以来,我已经处于相当有利的位置,目前正在开始自然科学硕士课程.目标是在一两个月内对此进行简短介绍.
据我所知,除了源控制的明显优势外,DVCS目前还为研究生的日常生活提供了以下改进:
分枝:
这是一个很大的问题.从观察DVCS实践可以看出,廉价分支主要是鼓励对新功能进行实验.科学编程完全是关于实验的.可以创建不同的分支来调整参数或算法.这一点尤其重要,因为大多数科学代码在他们的一生中都没有看到过一次重构(大多数研究生甚至都不知道它是什么),所以去不同分支的能力会给典型的疯狂带来一些方法.快速提交也可能意味着使用提交注释作为实验室笔记本的替代品.计算结果可以标记为特定的提交哈希码,以进行可重复的研究.
推送到服务器:
由于现在大多数科学代码都运行在某种集群上,因此DVCS可以用作某种更高级的Rsync,许多人已经将其用于将"生产"代码推送到HPC集群.这与分支相结合,可轻松运行多个版本的代码而无需离开
论文合作:
需要我多说?具有多个作者的论文与小型开源项目完全相同.当作者都在LaTex中写作时,论文上的协作应该是一个自然的选择,如果用Word之类的东西完成写作会带来额外的复杂性.这是提交评论可能发挥更大作用的地方.
我的问题是,您认为DVCS可以为科学程序员做出什么贡献?我看到很多关于转向社区源代码控制的讨论,但大多数人仍在研究Subversion.从我粗略的笔记来看,听起来DVCS应该是新毕业生的完美工作流程范例.我的想法有缺陷吗?或者科学编码是否仅仅落后于甚至听说过 DVCS工具?
有关:
如果可以的话,我需要在这里进行健全检查,非常欢迎任何关于纠正/改变以下内容的想法!我们已经使用我们的SVN进入了最后阶段,并试图通过放置Trunk/Release系统来纠正它.
我们开发了一个大型网站,我们将它们全部存储在SVN中.以下是我们的想法:
所以我们把所有这些都放在了自己的位置.除了它不工作和继承人为什么.
我们同时处理很多不同的功能/修复/问题并且它们并没有很好地检查功能完整(但总是至少工作).然后,有时你必须等待客户签字.结果,你最终得到了"准备就绪"的修订版,其中散布着"仍然在工作中"的版本.这意味着已完成的修订不会按顺序合并但不按顺序合并.我认为SVN可以处理这个,聪明的小东西,但显然不是.
下面是一个例子:
这导致网站被破坏,而Release分支几乎没用.
所以我们尝试了其他一些想法,例如将Release恢复为"Latest",然后按顺序合并所有修订版1,2和3.这个工作正常,直到我们的版本4还没有为现场做好准备,修订版5就是.突然间,我们又遇到了完全相同的问题!
好的,拿三个.恢复到最新,合并修订版5,然后将任何更新重新发送回Head.树冲突嘉豪!所以这不是没有.
我破获年底建成这一切manaually但它不是我想要做定期,最好我想剧本我们的部署,但不能同时发行是在这样一个烂摊子.
救命!我们做错了什么?我似乎无法找到任何解决方案来解决这个问题,即在发布中需要不同的顺序修订.如果它不可能那么好但是我们的意思是如何让事情变得容易.我们不能分支每一个变化,该网站需要30分钟+检查它将花费太长时间.
旁注,我们正在使用TortoiseSVN,所以我们可以在任何答案中将命令行示例保持在最低限度吗?
最新版本的TSVN和SVN版本1.6因此我们有时髦的合并跟踪等.
编辑:一篇优秀的博客文章,处理开发/发布周期(尽管使用GIT,但仍然相关),如果他们发现这个问题很有趣,那么每个人都想阅读它.(http://nvie.com/git-model)
编辑2:我写了一篇博客文章,介绍如何在你的网站上展示你正在研究哪个分支,其他人问我这个问题(http://www.offroadcode.com/2010/5/14/which-svn-branch-你在工作.aspx).希望有所帮助.与此同时,我们正在寻找窑,并希望下个月能够切换(gulp!)
git ×5
dvcs ×4
svn ×4
mercurial ×2
branch ×1
centralized ×1
cherry-pick ×1
clearcase ×1
cvs ×1
fast-forward ×1
git-branch ×1
git-merge ×1
merge ×1
release ×1
tortoisesvn ×1
workflow ×1