Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git 将hg书签转换为命名分支_Git_Mercurial_Branch - Fatal编程技术网

Git 将hg书签转换为命名分支

Git 将hg书签转换为命名分支,git,mercurial,branch,Git,Mercurial,Branch,从git迁移到mercurial(不是我个人的偏好:)之后,我遇到了一个问题:hgconvert将git分支转换为书签。有没有办法将书签转换为命名的hg分支?是否需要,为什么? 谢谢大家! Git分支和hg书签本质上是同一件事(对单个变更集的引用),这就是它们以这种方式转换的原因。书签的行为与git分支几乎相同——它们在提交时会前进,等等(没有跟踪分支的概念,但是使用扩展可以得到类似的结果)。在Mercurial中,许多人根本不使用命名分支——他们使用书签和/或匿名分支 Hg命名的分支非常不同—

从git迁移到mercurial(不是我个人的偏好:)之后,我遇到了一个问题:
hgconvert
将git分支转换为书签。有没有办法将书签转换为命名的hg分支?是否需要,为什么?
谢谢大家!

Git分支和hg书签本质上是同一件事(对单个变更集的引用),这就是它们以这种方式转换的原因。书签的行为与git分支几乎相同——它们在提交时会前进,等等(没有跟踪分支的概念,但是使用扩展可以得到类似的结果)。在Mercurial中,许多人根本不使用命名分支——他们使用书签和/或匿名分支

Hg命名的分支非常不同——名称是历史上不可磨灭的一部分。无法(自动)将git分支转换为hg命名的分支,因为git分支只命名分支的顶端-您无法知道其他哪些变更集应该是分支的一部分

如果您真的想从现在开始使用命名分支(我强烈建议您这样做-我个人更喜欢在单独的命名分支中完成每个任务),我建议您在每个当前书签处使用相同名称启动一个命名分支(然后您可以删除书签)


您可以手动执行并将变更集移植或移植到新的命名分支中,但这样做会删除与git变更集的关联——如果您使用的是hg git而不是convert,这一点很重要。虽然graft可能会保持一些关联,因为它是使用hg merge工具实现的。

非常感谢您提供的详细答案!hg上“强烈鼓励”命名的分支很有趣。对我来说,它们在显示分支历史的图形工具中造成了额外的混乱。你真的是这个意思吗?你有没有办法把这些工具清理掉?[编辑:'关闭'分支,请参见否-我没有解决方案,也不觉得需要解决方案(除了关闭已完成的分支)。对我来说,拥有多个命名分支与在一个分支上拥有多个头部没有什么不同,只是命名分支传递了更多信息。我希望拥有完整的历史记录,并在工具中放置更多智能显示选项。例如,尝试只查看一个分支(及其祖先)在OrtoiseHG中或使用revset选择要查看的变更集。如果您希望构建一个revset以在每次合并时显示单个分支加上另一个父级(单个变更集)。顺便说一句,以下revset执行“单个分支加上每个合并的其他父级”:
branch('branchname')+父级(branchname('branchname'))
。更有用的是(编辑耗时超过5分钟):“单个分支加上每个合并的其他父级+直接子级”。将此添加到hgrc的
[revsetalias]
功能中:
分支($branch)=分支($branch)+父级(分支($branch))+子级(分支($branch))