13

所以我是一个源代码控制白痴,所以请用这个清单来幽默我。

我最终决定在我的下一个项目中使用 Mercurial + TortoiseHg + (VS2010 + HgSccPackage ) + Kiln。

我读了http://hginit.com/并且玩了很多,但是我对源代码控制不太了解,所以我不想在这里犯错误,我目前的项目是我最大和最有价值的一个然而。

所以这是我的清单:

创作

  1. 我在 kiln 在线创建了一个新的仓库。
  2. 然后克隆到我的电脑上。
  3. 我将整个项目文件夹(该文件夹下具有多个项目的解决方案)复制到存储库中。
  4. 将此内容添加到 repo 根目录中的 .hgignore 文件中。
  5. TortoiseHg我点击添加文件
  6. 我偶尔会从 VS 提交。
  7. 当我准备好并准备好时,我会去同步->推送
    (所以这一切都很好吗?)

我在这里遇到的一个问题是。我在 HgScc 中找不到等效的添加文件,我注意到当我从 VS-IDE 添加新文件时,它没有源代码控制图标。(它没有添加到 mercurial 中?)

所以我最终通过 IDE 添加了文件,但他们没有检查。然后在几次提交(以及其他我不记得的事情)之后,我注意到有一个额外的分支或其他东西: 替代文字

现在如果我去尝试推动我得到"(did you forget to merge? use push -f to force)"。(是的,我击中了传入,并且我在即将发生的变化中没有)

无论如何,这只是一个游乐场,** 我刚刚意识到每次我从 VS 创建文件时都使用 TortoiseHG -> 添加文件修复问题?**(或者这里有更好的方法吗?)

分枝:

所以我对命名分支有点困惑,但窑是他们自己的分支/克隆东西。我在这里阅读说明

  1. 所以,在线,我可以选择在 Kiln 在线创建一个“分支”。
  2. 然后我会在本地克隆它作为一个新的仓库(就像它是一个新的仓库一样)
  3. 我会做出改变、提交、推动。
  4. 然后我将从 MAIN repo 中提取并从我的分支 repo 推送到 MAIN。

所以我在这里并没有真正看到任何合并选项,我猜是 mercurial 自己处理合并?所以我没有从存储库浏览器中看到分支?这是它应该如何做的吗?

最后一个问题,View History 和 View Change Log 选项有什么区别,它们对应的 hg 选项是什么?:

替代文字


更新:忘了提到我是这个项目中唯一孤独的开发者。=P

4

3 回答 3

13

这是您的个人问题,每个部分一个,每个部分都有我的意见/答案。


7. 当我准备好并准备好时,我会去同步->推送(所以这一切都很好,对吧?

正确的。

此工作流程中可能有所不同的一件事是,是否还有其他人也推送到同一个存储库。如果你有这个,在某个时候其他人已经将变更集推送到你在本地没有的存储库。当您尝试推送将在在线存储库中创建一个分支时,该分支会被多个“头”可见(如果您不明白我的意思,您应该在 Mercurial 上下文中查找该术语。)通常您不会不允许这种情况发生,因此推送将被中止。

当它中止时,您会将变更集从在线存储库拉到本地存储库中,将您的变更集头与您刚刚拉出的头合并,然后重新尝试推送,这通常会成功(除非您不走运和其他人同时推得更多。)


至于 HgSCC 和添加文件,我遇到了 HgSCC 的问题,所以我切换到 VisualHg - http://visualhg.codeplex.com,特别是因为 1.52 版本的 HgSCC 似乎有一些关于新文件的问题。如果您找不到解决方案,我建议您尝试 VisualHG。


你忘记合并了吗?

您应该将更改合并在一起,这样您就只有一个头了。在该示例屏幕截图中,您有 3 个,“将按钮添加到表单 2”、“最终提交”和“2nd prj (2)”。您应该更新到您认为是“大部分项目”的那个,选择它,然后右键单击其他头之一并在 TortoiseHg 中选择“与...合并”,然后完成合并并提交。每个这样的合并+提交都会删除 1 个头,因此您至少需要 2 个这样的合并才能回到 1 个头。


Kiln and Fogcreek 对如何处理树枝有不同的想法,这与许多其他人的想法不同。他们建议您创建一个完全不同的分支存储库并在其中工作,而不是使用命名分支。命名分支类似于您将屏幕截图中的三个变更集(以“最终提交”结尾的 3 个)命名为添加新表单或修复大错误的分支。

因此,与其做你在这里所做的那样,拥有 3 个头,Kiln 的“方式”将是拥有 3 个克隆,每个克隆只有直到它们的分支头的变更集。基本上,您将拥有 1 个 repo 克隆,其中包含“添加 2nd form”的所有内容,并继续使用“second proj”,但中间的变更集将不存在。第二个克隆最多有“添加第二个表单”,然后是一个额外标记为“添加按钮到表单”,第三个将有“添加第二个表单”,然后三个以“最终提交”结尾。

当然,最后,当推拉回到主存储库时,无论如何你最终都会得到这些分支,但他们建议你将类似的分支存储库用于更大的分支,比如添加大功能、模块等。


我猜 mercurial 自己处理合并?

只有在原始存储库和分支存储库克隆中都有新的变更集时,合并场景才会发挥作用。

如果你有这个,从分支存储库推送到原始存储库(或以另一种方式拉)会在你的目标存储库中添加新的头。这就是合并可以帮助您避免的。

这样,您的工作流程将如下所示:

  1. 将您拥有的所有更改推送到您的分支存储库(即,由于您首先需要分支存储库的原因而产生的更改集,大错误修复,新功能,大重写,等等)
  2. 尝试从分支存储库推送到原始存储库,得到消息说这将在目标存储库中创建头,所以你中止了。
  3. 从原始存储库拉到分支存储库。这将创建另一个头。
  4. 从分支存储库拉到本地存储库,并在此处进行合并,处理所有合并冲突,最后提交合并变更集
  5. 从本地仓库推送回分支仓库
  6. 在正式发布之前完成您可能想要在 Kiln 中进行的任何代码审查
  7. 从分支存储库推送到原始存储库(注意这与第 2 步相同,如果其他人(或您)同时在原始存储库中完成了更多工作,请跳回第 3 步并重复)

查看历史记录和查看更改日志选项之间的区别

不同之处在于您对它的看法。查看历史记录始终显示您选择的任何内容的历史记录,无论是文件还是解决方案文件本身,即。只是涉及该文件的变更集。

查看变更日志查看存储库的变更集日志,无论您选择了什么。

于 2010-12-15T12:19:00.343 回答
9

打印这个,层压它并贴在墙上。我做到了。

http://secretgeek.net/mercurial_flow.asp

于 2010-12-18T06:46:15.313 回答
3

如果您的项目还没有被 mercurial 控制,那么您应该使用“添加到源代码控制”命令。在解决方案资源管理器中右键单击解决方案或项目文件,然后在上下文菜单中选择命令。如果没有,此命令还将在解决方案/项目位置创建一个存储库。

如果您将项目添加到 Visual Studio 之外的 mercurial,则需要在 IDE 中重新加载项目。否则 HgSccPackage 不知道该项目是受控的。

如果项目受到控制,那么从 IDE 向该项目添加现有或新文件将自动将它们添加到 mercurial。

合并命令在“更改日志”对话框中可用。要进行合并,您需要“更新”到 Rev1,然后选择要合并的修订版 (Rev2),然后使用工具栏命令或上下文菜单命令运行“合并”命令。

如果您认为您在 HgSccPackage 中发现了错误,请在 HgSccPackage 问题跟踪器 ( http://bitbucket.org/zzsergant/hgsccpackage/issues ) 上创建一个问题,并提供重现步骤。

于 2010-12-15T17:14:25.243 回答