以下是git工作流程的示例:
http://wiki.github.com/bard/sameplace/typical-git-workflow
http://www.nabble.com/Git-workflow-overview-td16340337.html
http://osteele.com/archives/2008/05/my-git-workflow
假设您希望利用bug跟踪器与版本控制系统集成.在哪里/如何适合这些工作流程.你会在追踪器中看到什么?
我是BugTracker.NET的作者,它像许多其他的bug追踪器(Trac,Redmine,FogBugz)一样与svn集成.我们都或多或少地以同样的方式做到这一点.但是使用git,我很难想象与git的集成会是什么样子.
编辑:我已经看过github-fogbugz集成的一次尝试,但即使是那篇文章的作者也说"很明显FogBugz是为更传统的CVS/SVN SCM系统而写的.因此,提交列表显示并没有真正与git jive".
EDIT2:关于Redmine/git工作流程的一个主题:似乎最典型的设置是Redmine与任何被认为是"中央"存储库的本地克隆一起工作,所以当它们进入这个克隆时它会看到变化.触发器或预定作业自动推送到Redmine的克隆.
EDIT3:即使是Linux和Linus,最终还是一个主要的git存储库,可以被认为是仁慈的独裁者存储库:请参阅http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6的.git; A =摘要
EPILOGUE:谢谢大家.根据你们给我的指导,我的BugTracker.NET现在包括git集成.
Trac和Redmine都支持与Git集成.它看起来或多或少与Subversion支持完全相同.错误跟踪器跟随一个回购作为仁慈的独裁者回购,它不必关心该地方周围的所有其他克隆.
我认为值得一提的是,任何bug跟踪器都需要正确支持git分支.在分支机构上工作是Git方法的重要组成部分,需要在bug跟踪器中得到支持.Redmine可以通过补丁实现这一点,但最后我看了(大约一个月前),它不在主源树中(你只能跟随主人).
其他有用的功能是如何创建和合并分支的图形表示,类似于gitk的外观.我不知道有任何bug跟踪器可以进行这种可视化.
由Corey Trager编辑.我在这里复制/粘贴了@Squelch的答案(我也赞成@Squelch):
由于Git针对SVN的集中性质的分布式特性,存储库的每个用户或副本很可能具有不同的分支.exisitnig跟踪器通常具有存储库的本地副本,该副本用作中央引用("仁慈的独裁者"),可以将其视为所有用户的工作副本.
用户在本地副本中具有与跟踪器不同的分支结构是完全可行的.他们可能会选择保留一些私有,只从他们感兴趣的遥控器中拉出分支,或者将新分支推送到远程(跟踪器).用户甚至可以在他们自己之间共享远程可能永远看不到的分支.
错误跟踪器实际上只能引用它有权访问的存储库.通常这是跟踪器本地的,但也可以从远程存储库拉到跟踪器,并且更难管理.如果它正在访问远程,它只能跟踪它所知道的分支,并且除了计划任务之外,实际上没有启动此任务的方法.这也假设用户也在提供本地副本.
如您所述,可以使用计划任务或事件挂钩来使用提交日志更新跟踪器以获取详细信息.然后可以根据需要将这些细节与跟踪器问题进行匹配,并在上面进行说明.
简而言之,跟踪器通常会看到它当前可以访问的分支上所做的任何更改.使用钩子,可以立即看到这些更改,包括创建新分支.在推送这些更改之前,它不会查看或跟踪对用户(脱机)存储库所做的更改.
结束@Squelch
好问题.
为了回答这个问题,你需要看一下这两个工具(BugTracker.NET,你很清楚,很明显;)和Git(最初为2005年的Linux制作)实际上试图解决的问题.
BugTracker.NET:基于网络的跟踪器,用于bug(或者你要跟踪的几乎任何其他"项目",因为你可以定义自定义字段,状态和工作流)
Git:它的核心是一个补丁集成器,用于将大量人员(不是所有人都知道或具有特定角色)的大量补丁应用到大量文件中.很快.
因此,您可以在中央参考和分布式代码聚合工具之间看到不一致.
这两个模型之间的最低共同点仍然是"仁慈的独裁者工作流程",这是最分散的工作流程,它仍然有一个中央存储库供您监控.
但是,如果您遵循该路径(监视一个存储库充当"官方参照",同时在一个存储库下面具有松散的分布式合并工作流),则需要重新定义什么是用户及其角色.
特别是在将Git与基于角色的集中式错误跟踪工具集成时.
如果你看看Linus在谷歌的Git演示,大约在18'35,你会看到你意识到使用Git意味着没有识别所有用户并附加到角色.
这里有几个快速的引用/点来说明这个事实:
"因为你有一个中央存储库意味着每个正在处理该项目的人都需要写入中央存储库.
这意味着,因为你不希望每个人都写入中央存储库,因为大多数人都是蠢货,你创造了这类表面上不是白痴的人."
因此,并非所有人都会最终推送到中央存储库,并且大多数实际工作(小修复,验证,测试......)无论如何都将由有限数量的人完成.
"仁慈的独裁者工作流程"意味着您使用"信任网络":一组选定的人.同样,并非所有开发人员都可以直接看到.
从同一个演示文稿中,您还意识到"所有存储库"可以成为代码生命周期的一部分(而不是分支集成','测试','待发布'或标签'发布1.0) ',...):
"商业公司的一件事:分布式模型也有助于发布过程.
您可以拥有一个拥有自己的树的验证团队.他们从人们手中接过来并验证它们,并且他们验证了它,他们可以将它推送到发布团队,并说"嘿.我们现在已经验证了我们的版本,开发人员,他们可以继续,玩他们的头脑而不是必须创建标签,分支,无论你做什么,试图阻止彼此的脚趾.
再次,你只是每个组都可以拥有自己的树,并跟踪其工作和他们想要做的事情,彼此保持彼此的脚趾."
这强化了前一点:如果你只监控一个回购,你只能从有限数量的人那里监控.
它增加了一个转折点:
虽然你无法监控那里的所有回购,但你可能不想只监控一个回购:如果错误跟踪重叠几个阶段(即'有争议的集成','功能测试','用户验证', 'pre-production',...),每个人都有自己的树,每个树都是填写错误报告的潜在来源.
在这方面,"Redmine的Git分支支持"(修订版2840)仍然采用"集中式回购"思维模式,您可以使用分支进行开发生命周期模型化(您可以在其中执行开发周围的任务,而不是执行任务)一个实际的"发展努力",这是一个分支应该是什么).
所有这些都离你而去?
要么强加一个严格的中央存储库模型(每个人都必须推送到一个回购站),根据我的经验,当一个工具试图强迫你以一种方式工作而不是让你按照你想要的方式调整工具时这是永远不会好的.
或者重新定义bug生命周期管理以考虑:
可能有多棵树,每一棵树都是臭虫解决方案中的一个潜在步骤.
将被注册为处理错误但没有完整代码历史记录的用户:即监视的代码可能与它们没有直接关联,因为解析可以在开发人员存储库的私有分支中完成,而受监视的代码是由多个由专用存储库上的"集成器"合并.
智能报告能够告诉代码的"官方修订版"中检测到/修复了哪些错误,限制自己指出这些更改的来源(它来自这些远程分支的合并,对于这样的远程仓库)
简而言之,这不是一项微不足道的任务.
问题仍然存在:
Git发布工作流程,即inter-repo(推/拉)以及intra-repo(合并/ rebase):您要跟踪哪些?
Git私有分支:并非所有代码的历史记录都是可见的,不应该被跟踪.应该只跟踪公共分支(被拉/推,但也通过某些合并或变换在他们自己的回购中修改)
Git用户:根据他们在"信任网络"中的位置,他们具有跟踪者需要反映的不同角色.
为了回应MichaelM的回答,Redmine有很好的Git集成.它遵循引用等关键字的提交消息.修复了#1234表格的跟踪号码.
确实,分支支持还不存在,但它在大约一个月前进入了主干,并且注定要使用0.9版本.Redmine目前在SVN中维护,但Github上也有镜像
Redmine主干的链接指示Git存储库的跟踪器输出,不同之处在于分支的导航方式.
$ git log
可用于解析提交消息,作者和修订,以便在任何跟踪器中使用(如果需要).
编辑: 由于Git的分布式特性与SVN的集中性有关,因此存储库的每个用户或副本都有可能具有不同的分支.exisitnig跟踪器通常具有存储库的本地副本,该副本用作中央引用("仁慈的独裁者"),可以将其视为所有用户的工作副本.
用户在本地副本中具有与跟踪器不同的分支结构是完全可行的.他们可能会选择保留一些私有,只从他们感兴趣的遥控器中拉出分支,或者将新分支推送到远程(跟踪器).用户甚至可以在他们自己之间共享远程可能永远看不到的分支.
错误跟踪器实际上只能引用它有权访问的存储库.通常这是跟踪器本地的,但也可以从远程存储库拉到跟踪器,并且更难管理.如果它正在访问远程,它只能跟踪它所知道的分支,并且除了计划任务之外,实际上没有启动此任务的方法.这也假设用户也在提供本地副本.
如您所述,可以使用计划任务或事件挂钩来使用提交日志更新跟踪器以获取详细信息.然后可以根据需要将这些细节与跟踪器问题进行匹配,并在上面进行说明.
简而言之,跟踪器通常会看到它当前可以访问的分支上所做的任何更改.使用钩子,可以立即看到这些更改,包括创建新分支.在推送这些更改之前,它不会查看或跟踪对用户(脱机)存储库所做的更改.