假设我有以下场景:我克隆了一些开源项目,比如从 URL X 克隆。现在我有它的本地克隆。我对本地克隆进行了一些更改以尝试并在本地提交它们。现在我想要的是:
我想从开源项目 X 获取更新。只需获取其所有最新代码,无需我进行任何更改。但我希望我的更改能够保存在历史记录中的某个位置,以便我以后可以获取它们。我不想为此单独克隆,希望将所有内容都放在我的一个存储库中。
现在我做了以下事情:
- 使用
hg 标签
标记我的更改 - 从 URL X 提取并 merge 最新代码
- 将存储库恢复为 URL X 的最新版本
但我觉得这不是好方法,而且是迂回的。我认为还有更好的办法。您能推荐一下吗?
最佳答案
我会使用 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
返回到已添加书签的变更集。
当上游存储库中发生更改时,您可以将它们拉取并 merge 到您自己的分支中:
hg update mywork # if necessary
hg pull
hg merge
hg commit -m 'Merged new upstream changes.'
书签将向前移动,现在指向您刚刚创建的 merge 变更集。如果你想更新到X中的版本,那么
hg update --rev -2
将在您引入更改后执行此操作 - 这将更新到 merge 之前的旧提示更改集,即 X 的提示。
关于version-control - 私有(private)变更的用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3163591/