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
在错误的文件剥离后中断Mercurial中的文件连接_Mercurial - Fatal编程技术网

在错误的文件剥离后中断Mercurial中的文件连接

在错误的文件剥离后中断Mercurial中的文件连接,mercurial,Mercurial,背景: 起初有一个文件base.c,该文件位于存储库中,该存储库只有一个分支base Base被分支以进行扩展-分支。然后,这个新分支对base.c进行了几处更改 如果在base中的base.c文件中修复了错误,则它们将合并到扩展 事实证明,在Extended分支中向base.c添加太多内容不是一个好主意,所以文件被复制到ext.c。然后从base.c中删除大部分扩展的添加,并从ext.c中删除base功能。因此在这一点上,Extended中的base.c与base中的非常相似 问题: 分割文件

背景:

起初有一个文件
base.c
,该文件位于存储库中,该存储库只有一个分支
base

Base
被分支以进行
扩展
-分支。然后,这个新分支对
base.c
进行了几处更改

如果在
base
中的
base.c
文件中修复了错误,则它们将合并到
扩展

事实证明,在
Extended
分支中向
base.c
添加太多内容不是一个好主意,所以文件被复制到
ext.c
。然后从
base.c
中删除大部分
扩展的
添加,并从
ext.c
中删除
base
功能。因此在这一点上,
Extended
中的
base.c
base
中的非常相似

问题:

分割文件时,Mercurial被告知
ext.c
base.c
的副本,因为它们共享一个共同的历史记录。不幸的是,这不是一个好主意

现在,如果bug固定在
Base
分支上,并合并到
Extended
,Mercurial认为这些更改应该同时应用于
Base.c
ext.c
,即使后者不再与前者有任何相似之处。这使得合并非常恼人


有没有办法告诉Mercurial,
ext.c
不应再被视为与
base.c
相同?一种解决方案是用新文件替换
ext.c
,但历史记录不会随之出现。

您可以断开与
hg forget ext.c
的连接,然后将
hg add ext.c
作为新文件。但是,如果您使用
ext.c
的tip修订版执行此操作,您将丢失到目前为止的所有历史记录

您可以做的是添加一个早期版本的
ext.c
,甚至可以在重命名之前添加,并重播(移植)其自那时以来的历史。您可以将
ext.c
的历史记录作为分支添加到过去的修订中,并将其合并到tip:

---o---o---o---(tip)--(merge)
    \                /
     e---e---e ...  e
或者也许这并不重要,您可以将
ext.c
的历史记录添加到当前的
tip

---o---o---o---(tip)--e--e--e--e

这两种方法都不涉及任何历史重写(ext.c的“被遗忘”版本只是一条死胡同),因此传播更改应该没有问题。

有趣的问题。我假设您是用
hg copy
复制的?是
hg copy
被使用。如果
hg忘记ext.c
然后
hg将其添加为新文件,您可能会断开连接。。。但到目前为止,你将失去所有的历史。但是,您可以添加一个早期版本的
ext.c
(甚至可能在重命名之前),并重播(嫁接)它自那时以来的历史。@alexis这就是我最终所做的。你可能应该补充这一点作为答案,因为这个问题似乎偶尔会引起一些活动。