- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我倾向于使用来自Subversion的Mercurial,并且我想像使用Subversion一样维护集中化的工作流程。这是我在想什么:
stable (clone on server)
default (branch)
development (clone on server)
default (branch)
bugs (branch)
developer1 (clone on local machine)
developer2 (clone on local machine)
developer3 (clone on local machine)
feature1 (branch)
developer3 (clone on local machine)
feature2 (branch)
developer1 (clone on local machine)
developer2 (clone on local machine)
最佳答案
在Mercurial中,分支(在同一存储库内用hg分支创建)目前是不可逆的。引入后,您只能通过执行历史记录重写将它们从分支名称空间中删除。这就是为什么我只在项目生存期很短(只有几个功能分支)或分支足够通用才能保持最新状态(例如“稳定”,“错误修正”等)的情况下才创建真实分支的原因。据我所知,分支(与其他所有分支一样)都是在您的控制下在本地创建的,因此,如果有人决定使用分支,那么在拉/推之后该分支也会显示在您的主存储库中。
结果是-在您的结构中-从开发拉到稳定后,您还会将feature1和feature2分支合并到稳定中,这是完全没有用的。因为您在稳定版本上修复了错误,所以将稳定引入开发也将分支错误合并到开发中。您可以尝试通过创建稳定的存储库,将其克隆到开发,在开发中分支到feature1并将开发拉入稳定(在这些步骤之间进行一些更改)来进行尝试:尽管您合并了分支名称,但其名称在稳定状态下仍处于非活动状态
稳定的$ hg分支
默认4:1c3cd0d1a523
Feature2 3:82879465c5f3
Feature1 2:5d7480426f21(无效)
错误1:116860d2d85e(无效)
我记得Git可以删除分支,但是Mercurial正在进行一些开发以赶上该主题。我不确定这是否仍是最新的,所以如果我错了,请纠正我。
[编辑]根据Mercurial Wiki中的Pruning Dead Branches,有4种“删除”分支的方法。真正永久删除分支名称而不仅仅是关闭(取消激活)分支名称的唯一方法是,用干净的历史记录替换存储库。 [/编辑]
据我所知,使用Mercurial时,创建克隆而不是分支更为普遍。我记得去年我从SVN转到Mercurial时与您有相同的想法。通常的方法与集中式版本控制不同,因为分支可以在没有中央控制的情况下随时发生,因此克隆是“分支”而不污染分支名称空间并保持开发分离和灵活的首选方式(您将始终检索如果您提取/克隆包括所有分支的完整存储库,并且如果您只想分支进行测试,则必须选择一个永久的唯一分支名称,这样才能对项目中的每个人都显示出来。尽管这种方法似乎浪费了磁盘空间,并且您需要跟踪分支的位置(通常在用户帐户的某些项目文件夹中以及IDE的内部),但这似乎是一种更加灵活实用的处理方式分支机构。 (与您实际使用时相比,它读起来更加困难。)
到目前为止,在使用Mercurial进行了多个较小的项目后,这对我们公司来说是可行的(每个项目只有几个活跃的开发人员):
在服务器上:
项目名称-主要
发展被推向那里并从那里拉下来;这是保持团队存储库同步的“权威”开发“分支”
项目名称稳定
如果一个版本被发布/部署,这就是-main被推送到的地方;仅在-stable中完成了错误修复,然后又拉回到-main:根据Mercurial Guide by Bryan O'Sullivan的建议,通常可以将对被认为更稳定的版本(例如,先前版本)的错误修复拉回到development分支,但是可以对development分支进行更改包含较新的不稳定功能,除非发布(或类似)发布,否则不应将其引入维护分支。
在开发人员机器上本地:
projectname-main仅克隆一次,就可以通过拉(+ merge)进行工作并进行同步,并定期推送回服务器。
如果需要“分支”功能,则可以克隆-main(本地或从服务器),并将克隆命名为“ projectname-featuredescription”。为了备份或集中共享,我们还在服务器端创建一个克隆并将其推送到那里。如果功能已准备好用于-main,则将-featuredescription拉入本地-main,合并更改,从服务器拉-main,再次合并,然后将-main推回到服务器。如果在使用-featuredescription时对-main进行了更改,则可以轻松地从-main提取并合并更改(但不回推至-main,因为我们不希望该功能在那里)。
与真实分支相比,不利之处在于,在将变更集与父母之一合并后,您将无法轻松识别它们的来源。但这对我们来说还不是问题(提交消息足够有用,或者功能分支与父存储库合并后,功能分支的分离就没有意义了)。
考虑到更大的项目,我想出了以下类似于集中版本控制的方案,该方案应该可以工作(但我还没有使用)。它依赖对服务器端“权威”存储库的受限写访问,因此仅允许特权开发人员(项目负责人)合并并推送到那里。此外,还有一台CI服务器作为对另一个经过-main-tested的存储库的关守,这是-main的子集,其中仅包含经过CI批准的变更集,并稍有延迟。
在服务器上:
项目名称-主要
发展只有少数人具有写访问权,需要对主要更改进行拉动;他们控制着哪些要素分支被合并
经过测试的项目名称
发展除非出了点问题,否则任何人都不应在这里写东西,因为经过测试意味着持续集成系统成功地构建了-main并将该修订版本推入了-main-tested,因此此处的代码已经过验证,不应破坏编译或测试
项目名称稳定
经过项目名称稳定测试
稳定“分支”的相同策略;和以前一样,我们在发行版中将-main推送到-stable并进行错误修复,-stable-tested已通过CI认证
当然,在团队/开发人员可以将日常工作推向某个地方的地方,因为-main现在仅用于权威性更改(当然,它们可以完全在本地工作,但是如果他们不喜欢,则必须在某个地方进行同步)使用HG服务彼此建立对等关系,或者设置自己的服务器或进行备份)。
减少提交和存储库/分支的另一种方法是使用mq扩展名来处理补丁队列。但是,我发现使用克隆或分支更容易,至少对于小型项目而言更是如此。
关于mercurial - 这是一个好的集中式DVCS工作流程吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2555076/
阅读内置帮助后,在我看来,这两个命令都可用于修改工作区以匹配某个修订版。但我不明白更新和结帐之间的区别。请在您的答案中包含一些琐碎的工作流程,以显示何时更新/结帐是合适的。 最佳答案 第一个主要区别是
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
是否可以使用 Fossil 重命名目录?我试过明显的命令: fossil mv oldname newname Fossil 然后告诉我它做了一些事情: RENAME oldname newname
所以我一直在做一个相当大的项目,并像 VCS 一样使用 PlasticSCM。我将它与 DVCS 模型一起使用,但到目前为止,我几乎只是在我的办公机器和家庭之间进行同步。 现在我们正在让其他人参与该项
还有一个thread在 StackOverflow 上,处理多久提交一次对源代码控制的更改。我想把它放在使用 git 或 mercurial 之类的 DVCS 的上下文中。 你多久提交一次? 您是否仅
情况是这样的:在我的小办公室里,因为我们喜欢保持移动并且偶尔在家工作,所以我们没有中央文件服务器,而是将所有办公室文档都放在一个 SVN 存储库中,并且每个人都在他们自己的笔记本电脑。结帐重约 3GB
我最近问了一个关于 DVCS 是否适合企业环境的问题,这引发了我的另一个问题。 DVCS 的优点之一似乎是您可以轻松地分支和尝试新事物。当我开始考虑数据库更改时,我的问题就开始了。我一直发现将 DB
有没有办法明确删除“丢失”文件而不必使用 fossil rm 删除它们逐个? 我最近创建了一个存储库,其中有一个 Flash XFL 文件夹,Flash 似乎有点随意地删除和创建了一些二进制文件。每次
TFS 2010 是否有 SVN 提交后事件?每次开发人员 checkin 某些内容时,我都想运行脚本或应用程序或做一些事情。我浏览了互联网,但没有找到相关信息。 最佳答案 您将需要创建(并发布)一个
我正在寻找一个版本控制系统,它能够检测函数是否在文件中移动。例如,有一个文件“Foo.java”,其中包含函数“a()”、“b()”和“c()”。 public class Foo { voi
我的工作场所正在考虑转向现代 (D)VCS,这是我正在 push 的事情。 我的老板有这个想法,目前的工作流程是有一个集中的存储库,每个人都可以在任务完成后提交/merge 他们的更改,在处理任务时,
我最近开始在一个个人项目中使用 Git,我可以看到 DVCS 如何使我们在工作中受益(这是一家大型企业软件公司,目前正在运行 Perforce)。例如,我团队中的功能工作主要由开发人员创建自己的分支组
在使用 DVCS 近两年之后,似乎一个固有的“缺陷”是意外数据丢失:我丢失了未被推送的代码,我知道其他人也丢失了。 我可以看到一些原因:异地数据复制(即“提交必须转到远程主机”)不是内置的,存储库与代
还是传统的客户端 - 服务器 VCS 更合适?我目前正在使用 TortoiseSVN,但我对 DVCS 感兴趣,但我不确定尝试使用类似的东西是否是一个好主意。 最佳答案 由于您仍然可以推送到另一台运行
我希望在初学者的快速入门指南中对此进行解释,因为几乎每个从化石开始的人都会有他想要开始用化石管理的项目。但我在文档中找不到任何解释。 (我来自 git,这对于我的需求来说太重了,但至少在现有文件夹中创
我在一家公司工作,我们创建了许多特定于客户的小型应用程序。我们有几个开发人员,但大多数时候每个项目只有一名开发人员。 Customer1 ProjectX App
如何从 Bazaar 工作区中删除所有未版本控制的文件?我希望执行与 hg purge --all 或 git clean -fd 相同的操作。 最佳答案 我只在 BzrTools 中看到过这个,作为
我在这里和那里看到暗示直接从 DVCS 克隆运行实时部署是不好的,最好导出一个干净的树或 tarball 并部署它。在我看来,直接从 DVCS 克隆运行有几个优点: 无需在每次部署时传输整个代码库。
Smalltalk 令人讨厌的事情之一是,由于它管理源代码的方式,它(通常)需要自己的 VCS。 Squeak 和 Gemstone(至少在其 GLASS 版本中)有一个名为 Monticello 的
我想知道是否可以使用 nuget 在版本控制中仅存储对所需包的引用(仅 package.config 并忽略 packages 文件夹)。 有没有办法告诉 nuget(重新)下载各种 package.
我是一名优秀的程序员,十分优秀!