Mercurial与Visual Studio 2010的白痴级检查清单

13

我对源代码控制一窍不通,所以请您帮我检查以下清单。

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

我读了http://hginit.com/,并进行了一些尝试,但我对源代码控制的知识很少,所以我不想犯错,因为我的当前项目是迄今为止最大和最有价值的。

这是我的清单:

创建:

  1. 我在Kiln网上创建一个新仓库。
  2. 然后在我的电脑上克隆它。
  3. 我将整个项目文件夹(包含多个项目的解决方案)复制到该仓库中。
  4. 我在仓库根目录下添加此内容到.hgignore文件中。
  5. TortoiseHg中,我点击添加文件。
  6. 我偶尔从VS中提交。
  7. 当我准备好时,我执行同步->推送。
    (这样做没问题吧?)

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

然后我通过IDE添加了文件,但是没有检查标记。之后提交了几次(以及其他一些我不记得的事情),我发现有一个额外的分支或其他东西: alt text

现在如果我尝试推送,会出现以下错误:"(你忘记合并了吗?使用push -f来强制)"。(是的,我键入了incoming,并且我没有任何in coming更改)

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

分支:

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

  1. 因此,在线上,我有一个选项可以在Kiln在线上创建“分支”。
  2. 然后我将其克隆为一个新的本地repo(就像它是一个新的repo一样)
  3. 我将进行更改,提交并推送。
  4. 然后我将从主repo中pull并从我的分支repo中推送到主repo。

所以我没有看到任何合并选项,我猜Mercurial会自行处理合并?那么我是否应该从存储库资源管理器中查看分支?这是正确的操作方式吗?

最后一个问题,查看历史记录和查看更改日志选项之间有什么区别,它们对应于哪些hg选项?:

alt text


更新:忘记提到我是这个项目上唯一的开发人员。 = P


1
我在使用最新版本的HgSCC添加新文件时遇到了问题。在我看来,这个版本似乎有一些bug或其他问题。我已经切换到VisualHg(http://visualhg.codeplex.com),它也使用TortoiseHg。 - Lasse V. Karlsen
1
VisualHg很整洁,可以自动添加/删除解决方案中的文件,而不需要太多麻烦。 - Macke
还要注意,Mercurial有一个聊天室,虽然人数不是很多,但我会尽量安排时间在那里,以及一些帮助构建Mercurial的人(我只是一个粉丝)。如果您有更多讨论性的问题,那可能是一个好去处。http://chat.stackoverflow.com/rooms/39/mercurial - Lasse V. Karlsen
+1 一个好问题,我已经将其添加到我的收藏夹中。 - Shekhar_Pro
3个回答

13

这里是你的个别问题,每个部分一个,以及我对每个问题的意见/答案。


7. 我什么时候准备好了就同步->推送(所以所有东西都没问题了对吧?

正确。

在这个工作流程中可能会有一件事不同,那就是如果有其他人也向同一仓库推送更改。如果是这种情况,在某个时刻,其他人已经将更改集推送到您本地没有的仓库中。当您尝试推送自己的更改时,这将在在线仓库中创建一个分支,由多个“头”(如果您不理解我所说的术语,请在Mercurial上下文中查找它)显示。通常情况下,您不能允许这种情况发生,因此推送将被中止。

当它中止时,相反,您需要从在线仓库中将更改集拉到本地仓库中,将您的更改头与您刚刚拉取的头合并,然后重新尝试推送,通常会成功(除非您不幸地遇到其他人同时推送更多的内容)。


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


你忘记合并了吗?

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


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

因此,与其像这里所做的那样具有3个头,Kiln的“方式”是拥有3个克隆版本,每个克隆版本只有到其分支头的更改集。基本上,您将拥有1个存储库克隆,其中包含“添加了第2个表单”和“第二个proj”的所有内容,但是中间的更改集则不存在。第二个克隆将有至多“添加第2个表单”,然后再添加一个标记为“向表单添加按钮”的额外操作,第三个克隆将有“添加第2个表单”,然后是以“最终提交”结尾的三个更改集。

当然,在最后推送和拉取以返回到主存储库时,您最终仍然会得到那些分支,但他们建议您对于更大的分支(例如添加大型功能,模块等)使用类似的分支存储库。


我猜Mercurial会自行处理合并?

在您的情况下,仅当原始存储库和分支存储库克隆版本中都有新的更改集时,合并才会发挥作用。

如果出现这种情况,从分支存储库推送到原始存储库(或反向拉取)将在目标存储库中添加新的头。这就是合并能够帮助您避免的情况。

以这种方式,您的工作流程如下:

  1. 将所有更改推送到您的分支存储库(即源于您需要分支存储库的原因的更改集,例如大型bug修复,新功能,大型重写等)
  2. 尝试从分支存储库推送到原始存储库,获取消息表示这将在目标存储库中创建头,因此您会中止该操作。
  3. 从原始存储库下拉到分支存储库。这将创建另一个头。
  4. 从分支仓库中将代码拉到本地仓库,在本地进行合并,并处理所有的冲突,最后提交你的合并变更集
  5. 将本地仓库的代码推送回分支仓库
  6. 在正式发布前,在Kiln中完成任何需要进行的代码审查
  7. 从分支仓库推送到原始仓库(如果有其他人或您在此期间在原始仓库中做了更多工作,返回步骤3并重复执行它)

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

区别只在于你所查看的内容。查看历史记录总是显示你选择的内容的历史记录,无论是文件还是解决方案文件本身,即与该文件相关的所有更改集。

查看变更日志则查看整个仓库的变更集日志,与你选择的内容无关。


非常感谢。如果我能点赞两次就好了!=P(哦,忘了提一下,我是唯一开发这个的人) - gideon

9

2
+1 谢谢!=D Secret Geek 太棒了!我应该订阅他的博客! - gideon

3
如果您的项目尚未受Mercurial控制,则应使用“添加到源代码控制”命令。在解决方案资源管理器中右键单击解决方案或项目文件,然后在上下文菜单中选择该命令。如果没有存储库,则此命令还将在解决方案/项目位置创建一个存储库。
如果您在Visual Studio之外将项目添加到Mercurial中,则需要重新加载IDE中的项目。否则,HgSccPackage不知道该项目已受控制。
如果项目已受控制,则从IDE向该项目添加现有或新文件将自动将它们添加到Mercurial中。
在“更改日志”对话框中提供合并命令。要执行合并操作,您需要“更新”到Rev1,然后选择要与之合并的修订版(Rev2),然后使用工具栏命令或上下文菜单命令运行“合并”命令。
如果您认为在HgSccPackage中发现了错误,请在HgSccPackage问题跟踪器中创建一个包含重现步骤的问题(http://bitbucket.org/zzsergant/hgsccpackage/issues)。

谢谢您的回复,Sergant。我希望您能看到这篇文章。不幸的是,对于我来说,从IDE添加文件并不能将它们添加到Mercurial中(即使项目受控制,因为IDE中所有其他文件都有图标)。我会尽力确认一切,并将其作为问题添加。我不确定这是一个错误还是未实现的功能。 - gideon
1
HgSccPackage v1.5.2版本中的“添加文件”命令存在一个错误。当在mercurial配置文件中启用了caseguard mercurial扩展时,该命令无法正常工作。这个问题已经在HgSccPackage v1.5.3中得到修复,所以您可以再次尝试使用它。 - zz-sergant
hgsccpackage已经发展得非常好了。我曾经是VisualHG的用户,但几个月前转换到了这个软件。如果你已经有一两年没有看过它了,再去看看吧。 - CAD bloke
只是跟进一下,我又回到了 https://bitbucket.org/lmn/visualhg2/wiki/Home 上的 VisualHg。 - CAD bloke

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接