用例进行私人更改

时间:2010-07-02 06:13:27

标签: version-control mercurial branch

假设我有以下场景:我克隆了一些开源项目,比如来自URL X.现在我有了它的本地克隆。我对本地克隆进行了一些更改以尝试解决问题并在本地提交它们。现在我想要的是:

我想从开源项目X获得更新。只需获取所有最新代码,而不需要进行任何更改。但我希望我的更改能够在历史记录中的某个位置生存,以便我以后可以使用它们。而且我不想为此分离克隆,希望在我的一个回购中完成所有。

现在我做了以下事情:

  1. 使用hg tag
  2. 标记我的更改
  3. 拉&合并来自URL X的最新代码
  4. 将存储库还原到URL X的最新版本
  5. 但是我觉得这不是好方法,而是迂回。我认为有更好的方法。你能建议吗?

1 个答案:

答案 0 :(得分:3)

我会使用bookmark而不是标签。如果您使用Mercurial 1.8或更高版本,则您已经内置了书签功能。否则,您首先通过将以下内容放入~/.hgrc文件中来启用扩展程序:

[extensions]
bookmarks =

[bookmarks]
track.current = True

现在获取项目的克隆:

hg clone http://bitbucket.org/user/X
cd X

然后劈开:

# edit, edit, edit...
hg commit -m 'Great new feature!'

现在为此变更集添加书签

hg bookmark mywork

这就像一个标签,但书签的优点在于您进行新提交时会移动。这就像你正在读书并随身携带书签一样。创建书签后,您可以执行

hg update mywork

返回已添加书签的变更集。

当上游存储库中进行了更改时,您将它们拉入并合并到您自己的分支中:

hg update mywork # if necessary
hg pull
hg merge
hg commit -m 'Merged new upstream changes.'    

书签将向前移动,现在指向刚刚创建的合并变更集。如果要更新到X中的版本,那么

hg update --rev -2
在您提交更改后

会执行此操作 - 这会更新为合并之前的旧提示更改集,这是X的提示。