使用Mercurial(hg)跟踪更改并自动同步?

时间:2011-05-19 19:20:44

标签: mercurial synchronization dvcs

首先,我一直盯着一页一页的解决方案,但似乎没有一个符合我的情况。

我在全国各地都有使用Windows工作站的Web开发人员。我们认为DVCS对我们来说是最好的,因为集中式系统不起作用(Serena:慢速网络连接需要永远检查......他们不这样做,因为它不是“简化”等等。)

我们使用Eclipse编辑和修改处于不同状态的开发服务器上的文件。 (大多数DVCS方案假设您在工作站上设置了Web服务器或正在进行二进制可执行开发。)

我想尝试的是为开发人员更改和“功能播放”创建一个本地存储库,但会自动使开发存储库保持最新状态。我想过使用Mercurial钩子来自动拉/更新/合并/推送,但这需要开发人员每次想要测试更改时都提交。 (为了触发钩子将其文件上传到开发服务器。)理想的情况是在文件保存时自动发生这种情况,因为培训人员使用版本控制已经成为一个问题(主要是因为它的PITA目前很慢WAN和虚拟位置。升级WAN不是一种选择。)

我的猜测是,我将不得不设置Unison或其他东西以保持开发人员的存储库同步到开发服务器,就像它是本地副本一样,当然会与其他开发人员同步。我试图找出是否有人有一个简化/简单的解决方案,让所有开发人员保持最新,同时允许他们随意进行版本控制(很容易。)

3 个答案:

答案 0 :(得分:0)

我们对mercurial非常满意,但我们不得不改变我们的习惯......并且花了一些时间

每个开发人员现在都有一个本地测试平台。提交是通过分支进行的,在本地验证测试之前没有任何内容被推送

然后,哈德森是我们的朋友。为了集成团队工作,每个提交都会生成一个测试应用程序完整性的构建。红色表示回滚并返回开发。绿色很酷

开发人员在这里提交“理智”代码并按团队集成到中央仓库。他们必须决定什么时候推动。没有同步的任务可以从这个负担中提供它们。当我看到所有可能发生的错误时,即使每个推送选择都是由人类明智地做出的,我也无法想象每个文件是否自动发生更改保存

Mercurial的良好经验......

答案 1 :(得分:0)

这就是分支机构的用途。有一个名为“不稳定”的分支,并使用存储库设置您的开发服务器,该存储库在提交/合并时自动更新该分支(通过挂钩)。个人开发人员可以自由地在功能分支上工作并在本地提交。当某些东西准备好被共享时,开发人员将他们的更改合并到“不稳定”分支中,并将该分支推送到开发服务器/存储库。

我以这种方式管理我的部署。我的Web服务器虚拟主机Web根指向Mercurial存储库/工作副本。当某些东西准备出去时,我将它合并到“稳定”分支并将“稳定”推送到服务器。存储库挂钩使用新更改更新虚拟主机上的文件。

[hooks]
changegroup = /usr/bin/hg update stable >&2

我这样做了一个月左右,但它的工作就像一个魅力。

另外,+1检查哈​​德森/詹金斯。您正在寻找的是“持续集成”(CI),而Hudson和Jenkins就是这样做的。

如果您无法在所有工作站上安装开发服务器,那么使用测试驱动开发和某种单元测试框架可能会对您的语言起作用 - 其中大多数都不需要完整的服务器实现才能够编写并测试您的代码。这需要改变范例,但你肯定会从中获得更好的代码质量。

答案 2 :(得分:0)

您说您希望拥有一个开发人员更改的本地存储库,但会自动将任何更改推送到服务器。如果您无法在本地开发环境中测试更改,那么拥有本地开发分支有什么意义?如果您的测试必须在开发服务器上完成,那么我无法想到允许在本地存储库中进行“功能播放”,同时在开发服务器上保持任何理智。

在这种情况下,您最好的选择可能是在开发服务器上进行分支,并让服务器检出不同的分支以测试不同的功能(hg update -C feature-blah)。服务器存储库的默认状态应该是主“devel”分支(hg update -C devel)的检出,当任何功能或bugfix分支被验证为工作时,它们将合并回“devel”并更新服务器的存储库从那起。

编辑以澄清:您的开发人员要么从“devel”签出,要么从功能分支签到本地计算机。然后,他们将进行任何编辑并将其推回服务器,然后将服务器的活动分支切换到新更新的代码。

此外,我假设您的其他评论中只有一个开发服务器,并且它一次只能运行一个版本的代码。如果情况并非如此,我的回答根本没有意义。