这个问题不仅仅是技术问题。我也想进入这个概念。
BitBucket上有一个外国项目(例如ObjectListView)。我需要同时处理两个问题。在git中,我只是在克隆后创建到本地存储库中的分支。
但是我如何用Mercurial做到这一点?
当我在那里创建分支时,我无法将我的本地提交推回到远程存储库,因为缺少' - allow-new-branch'选项。 所以它不希望我分支。
在我目前的理解中,我只想为每个新的feauter(分支)创建一个克隆。所以这意味着当我想处理两个不同的问题时,我必须在BitBucket上为一个项目创建两个分支。
你会如何解决这个问题?
答案 0 :(得分:1)
这里有一些遗漏的信息,所以我不确定我知道你的问题是什么。我会尝试采取一些有根据的猜测并涵盖许多可能性。如果我没有充分解决您的问题,请随时回复。
首先,如果你愿意,你绝对可以创建新的分支。您需要使用hg push -f
或hg push --new-branch
(如果您使用的是命名而非匿名分支)使远程服务器接受它们(这是为了防止您推送新的意外分支)。当然,您将需要对存储库的写访问权(或者对存储库进行分叉并处理该分支)。
其次,如果您只想推送当前版本/分支(以及功能分支的任何相关修订版)而不同步整个存储库,那么hg push -r .
将执行此操作(此处为.
表示当前版本,您也可以指定其他版本)。如果您经常使用它,您可能想要创建一个别名,例如submit = push -r .
。
第三,如果您确实需要单独的工作区,使用hg share
而不是克隆存储库可能更方便。 (请注意,您首先必须启用共享"扩展"为此;单词"扩展名"在引号中,因为它实际上是核心Mercurial的一部分而不是传统意义上的扩展。)hg share
创建一个单独的目录,该目录仍然链接到同一个存储库,但是有一个单独的签出单独的文件。
理解Git和Mercurial中的分支是完全不同的东西也很重要。除了命名特定的提交之外,Git中的分支存在以保持修订版本(因此它们不会被垃圾收集)。在Mercurial中,没有任何东西可以被垃圾收集,所以你不需要为此目的使用类似Git的分支;相反,Mercurial有匿名分支(有点像Git中的分离HEAD - 排序)和命名分支(用于标记具有永久名称的修订集)。书签可用于将临时标签放在任一类型的分支(或特定修订版)上。如果您愿意,书签+匿名分支可以让您感觉像Git一样。
所以,如果你想要一个类似Git的方法,你只需要创建一个匿名分支(并可选择在它们上面放一个书签以便于参考,尽管它们是用{{1}创建的两个目录中的分支头如果你希望在不必切换的情况下同时处理两者,那么可以是更好的选择。然后你使用hg share
将特定分支推送到远程存储库(你可能还需要hg push -r .
如果你正在创造一个新的头脑。)
但是,如果它不是您的存储库,您可能需要与所有者核实他们喜欢哪种结构;例如,许多Mercurial用户更喜欢命名分支,以便能够告诉以后哪些修订版本在一起(有点像跨越多个修订版的标记)。