现在,我们正在使用Perforce进行版本控制.它有一个方便的功能,我们可以用来引用构建的严格增加的更改号,例如"如果你的构建至少是44902,你将得到错误修复".
我想切换到使用分布式系统(可能是git),以便更容易分支和在家工作.(Perforce完全可以实现这两个目标,但是git工作流程有一些优势.)因此,尽管"支流开发"将被分发而不是参考通用的修订版,但我们仍然会维护一个主要的git repo,所有更改都会需要在创建构建之前加入.
保存严格增加的构建ID的最佳方法是什么?我能想到的最简单的方法是使用某种post-commit钩子,每当主repo更新时它就会触发,并且它注册(哈希)新树对象(或者提交对象?我是新手git)有一个集中的数据库,可以分发ID.(我说"数据库",但我可能会用git标签来做,只是寻找下一个可用的标签号或什么.所以"数据库"真的是.git/refs/tags/build-id /. )
这是可行的,但我想知道是否有更简单,或已经实现,或标准/"最佳实践"的方式来实现这一点.
我最近开始在个人项目上进入Git,我可以看到DVCS如何让我们在工作中受益(这是一家大型企业软件公司,目前正在运行Perforce).我的团队中的功能工作主要包括开发人员创建自己的分支; 有时这些是由小型开发团队共享的.我认为在这种情况下使用DVCS会更有效率.
然而,在更一般的情况下,我有兴趣听到在工作中使用DVCS的人,大中型团队.
显然,当您将函数从一个源代码文件移动到另一个源代码文件时,git修订日志(对于新文件)可以显示该代码片段最初来自何处(请参阅本教程中的"查看历史记录"部分).
这是如何运作的?
假设您这样做,hg status并且您修改了三个文件.我知道如何签入所有三个文件(hg commit).但是,如何检入(然后hg push)只修改其中一个文件?
那里有很多SCM系统.有些开放,有些是封闭的,有些是免费的,有些是非常昂贵 哪一个(请只选择一个)你会用于一个拥有多个网站的3000多个开发者组织(有些网站背后的链接很慢)?解释为什么选择你选择的那个.(给出一些理由,而不只是"因为".)
我正在Mac OS X上寻找引人注目的Git和Mercurial客户.到目前为止,我发现的大多数客户都没那么引人注目.有些客户甚至在Ruby或Tcl/Tk中编程,IMO在操作系统集成方面不是优秀的OS X公民.
我的客户端类似于Versions.app或Cornetstone,它们只是Subversion客户端.也许有人得到了我的内幕消息.
我想做一些非常简单的事情:创建一个新的分支.但我搞砸了.我在哪里弄错了,我该如何解决?
我是Mercurial的唯一用户.我将修订版54提交并推送到远程存储库.我想基于修订版53创建一个分支,因此我将本地副本更新为修订版53,进行了更改并提交(忽略关于"它不是头部"的警告).然后,当我试图推送到远程存储库时,它说
abort: push creates new remote head
Run Code Online (Sandbox Code Playgroud)
也许我需要告诉Mercurial我想创建一个新的分支?如果是这样,如何以及在什么时候?
谢谢!
我知道Mercurial可以跟踪文件的重命名,但是当我这样做时,如何让它显示重命名而不是添加/删除hg status?例如,而不是:
A bin/extract-csv-column.pl
A bin/find-mirna-binding.pl
A bin/xls2csv-separate-sheets.pl
A lib/Text/CSV/Euclid.pm
R src/extract-csv-column.pl
R src/find-mirna-binding.pl
R src/modules/Text/CSV/Euclid.pm
R src/xls2csv-separate-sheets.pl
Run Code Online (Sandbox Code Playgroud)
我想要一些迹象表明已经移动了四个文件.
我想我读到的地方输出是这样的,以保持与某些东西或其他东西的向后兼容性,但我并不担心.
这是我早期的问题 "如何使用mercurial管理并发开发" 的表亲问题,该问题涵盖了各个开发人员的工作流程.这个问题的答案实际上会影响开发人员工作流程的选择.
这不是一般的"版本管理最佳实践"或CI问题,因为它已经被问 很多 次有很好的答案,而且也可用来消磨时间的文学庞大的身躯.
我只是要求在发布管理的上下文中使用mercurial的具体方法.
最明显和最主要的答案应该是稳定的/默认的,这完全由@Steve Losh 的漂亮博客覆盖,并且在他的回答中更简洁.它简单而有效.
这种设置的一个突出例子是hg本身.hg使用更多的存储库进行主动开发,但是出于管理目的,一切似乎都包含在主repo的stable/default分支中.
hg设置实际上表示稳定/默认的变体,或者更确切地说是扩展版本:分支克隆.我在回答关于命名分支与多重回购的问题时描述了这个过程(来自@Martin Geisler的另一个很好的答案).在我的回答中我忘记提到的是分支克隆如何为开发人员工作流程工作:如果你需要修复分支的bug,你可以hg clone <main repo>#<branch>但不是分支克隆,因为你的变更集仍然会回到主仓库并推出自动分支克隆.当然,您可以选择不克隆并仅hg update <branch>在主克隆中,但是大多数使用单独克隆的参数(尤其是独立构建)都适用于此处.
现在回到问题:是否有其他方法适合不同的现实场景?例如,传统的主要/次要/补丁发布周期与版本之间的长时间推移可能需要完全不同于快节奏,即用即发的Web应用程序.如果您愿意,还请评论稳定/默认和分支克隆方法.
由于这几乎是一个调查问题,我只能主观地接受"最佳"答案.如果我能得到比我的开发人员工作流程问题更多的答案,那就是.
感谢您的所有投入!
我目前使用Git,我对它很满意,但我想更多地了解Mercurial.它比Git有什么优势吗?Git比Mercurial有什么优势?
我意识到已经对这两者进行了详细的比较,但这不是我要求的.我不想要冷静的信息,而是慷慨激昂(但礼貌!!!)的理由,为什么你认为一个更好/更容易/更快/更聪明/更强大等等.