我可以在单个用户Mercurial工作流中的存储库中工作吗?

时间:2012-03-21 02:13:21

标签: mercurial workflow

我在单用户工作流程中使用Mercurial,如果我的编码或编写出现严重错误(我主要使用Stata和R统计软件包和LaTeX),可以选择回滚更改。虽然只在本地工作,但这很简单,因为我所拥有的只是主要的回购。

最近我开始使用Linux服务器来获得更高的计算能力。到目前为止,我一直在手动复制文件并仅在本地使用Mercurial,但我想使用Mercurial来处理这个并保持这两个工作流同步。此外,我喜欢在本地(在我的笔记本电脑或台式机上)和服务器上进行编码的能力。

我是否需要在服务器上复制主要仓库并保持主要仓库不受影响?或者,当我在服务器上时,我可以直接在主回购中工作吗?在this question @gizmo指向this workflow guide; “单一开发人员”的讨论很有帮助,但我仍然不清楚,当我在服务器上时,我可以在主仓库中工作而不会引起一些我还不了解的重大问题。

谢谢!

编辑:我应该补充一点,我已经通过Joel Spolsky的HgInit.com教程进行了工作,我很乐意在ssh上推/拉/克隆/等等,但我仍然不确定我是否可以在主回购中工作而不会导致后来心疼。或许这可能是一个哲学问题?谢谢!

2 个答案:

答案 0 :(得分:4)

  • Mercurial是DVCS,它意味着 - 在每个位置你有两个:本地工作副本和本地存储库
  • Mercurial是DVCS,它意味着 - 您可以在repos之间自由交换(拉|推)数据(如果它们提供远程访问方法)。

如果你

  

通过ssh轻松推/拉/克隆/等

不要忘记在您的工作在家周围执行拉|推送周期(为了不在家庭主机上运行hg服务并从服务器同步作为来源)你不会在每个地方都有完美的线性聚合历史。甚至你有时会忘记同步repo,在最坏的情况下你会得到两个头,你可以很容易地合并(不知道Stata和R数据文件的格式,但LaTeX,作为文本,可以合并)

答案 1 :(得分:2)

直接在服务器上的存储库中工作没有问题。从Mercurial的角度来看,“主要”存储库只是另一个随机存储库--Mercurial并不认为它是特殊的。

你不直接这么说,但人们问的一件事是“当我推送到服务器时会发生什么?”答案是hg push仅将数据发送到存储库.hg/文件夹)。当您按下它时,服务器上不会触及工作副本。由于您将新的更改集推送到服务器,因此下次处理服务器时可能需要运行hg update。这就像你在服务器上运行hg pull一样 - 之后你也会合并或更新。

我总是遇到这种情况:我在家里创建了一个存储库,并在工作时将其克隆到我的计算机上。我更改任一位置的文件,并在两个存储库之间推/拉。如果我需要与其他人分享我的工作,那么我在Bitbucket创建一个存储库并将代码推送到那里。这样Bitbucket就可以作为代码的一个很好的规范存储库,我通常会在家里和工作中更改存储库中Bitbucket的默认路径。所以在家我会:

[paths]
default = httsp://bitbucket.org/mg/<repo>/
work = ssh://mg@work/<repo>

这样我就可以hg push向Bitbucket发送内容,hg pull work直接从工作中获取内容(如果我在离开前忘记推送到Bitbucket)。