Mercurial在更新到不同分支期间创建未版本控制的文件副本

时间:2012-10-16 18:25:03

标签: mercurial branch

不久之前,我注意到当我在分支机构之间更新时,hg开始在看似随机的时间内在存储库中创建无版本的文件副本。我不能为我的生活想想我可能已经改变了这个开始发生的事情。详细或跟踪输出中没有任何内容表明正在创建这些文件。

新的无版本文件名全部以添加到扩展名末尾的随机字符串结尾:

file1.txt-23121dd1  
someotherfile.sql-bc769bd2  
bizarrofile.cs-40a93ed0
hgisinvadingurhead.ppt-f8e9015a

在尝试确定这种情况时,我注意到以下情况:

  • 文件名中添加的字符与存储库中的任何变更集ID不对应。我对grep -i的输出做了hg history,文件名中的字符串没有出现在输出中的任何位置。
  • 在所有情况下,文件都存在于我正在处理的分支中,但在我更新的分支中不存在。
  • 有时它只有一两个文件,有时它只有几个。
  • 从来没有这些是一个分支中存在但不存在另一个分支的所有文件。
  • 从来没有在更新之间使用同一组无版本文件。
  • 我团队中正在克隆相同存储库的其他人似乎没有遇到这个

我想也许这可能是存储库中的东西,但它也会发生在其他现有的存储库和全新的存储库中。

例如,我已经完成了这个(除了最后的hg状态输出之外省略了hg输出,但输出没有错误):

c:\> mkdir repo
c:\> cd repo
c:\repo\> hg init
c:\repo\> echo default > default.txt
c:\repo\> hg add
c:\repo\> hg commit -m "Commit default"
c:\repo\> hg branch branch1
c:\repo\> echo branch1 > branch1.txt
c:\repo\> hg add
c:\repo\> hg commit -m "Commit branch1"
c:\repo\> hg update default
c:\repo\> hg status
? branch1.txt-23121dd1

每次都不可重复。我可以重复这些步骤,有时无版本的文件最后会在那里,有时它不会。这是非常零星的。但是,在较大的存储库中,我几乎总是在分支更新之间看到至少一个未版本控制的文件。

随后是hg update default的完整输出。无论是否创建了无版本文件,输出始终显示。

resolving manifests
calling hook preupdate.eol: <function preupdate at 0x0000000002571668>
removing branch1.txt
0 files updated, 0 files merged, 1 files removed, 0 files unresolved

当我第一次注意到它时,我使用的是旧版本的hg,但在更新到2.3.2之后问题仍然存在。我使用的是带有TortoiseHG 2.5.1 x64的Windows 7 Pro x64。但是,我并不认为它与Tortoise有关,因为我可以通过命令行中的hg来复制问题。

我的mercurial.ini文件的内容是:

[ui]
username=myname <myname@mydomain.com>
ignore=C:\users\myusername\.hgignore
verbose=true
trace=true

[eol]
native = CRLF
only-consistent = False

[extensions]
purge =
eol =

我可以忍受它,但确保我不会在使用其他新文件的变更集中意外地将这些文件添加到存储库时,这很痛苦。

如果有人看到了这个并且可以指出我的罪魁祸首我会非常感激!

2 个答案:

答案 0 :(得分:0)

如果在更改集之间进行更新时正在使用文件,则使用添加的数字重命名正在使用的文件,以便更新成功。

答案 1 :(得分:0)

禁用eol扩展程序是否有帮助?我注意到你的测试也没有使用.hgeol文件(这是与this extension相关的事情之一)。有another thread的内容专门针对此扩展程序的一些问题。