这意味着Mercurial不知道该怎么做。您的工作副本中有一个内容为something
的文件。该文件不受版本控制,因此当您更新时,Mercurial通常会保留它。但是,要更新到的修订版也具有相同名称的文件,并且与您在文件中已有的something
有所不同。
如果你
$ hg init
$ echo "a file" > a
$ hg add a
$ hg commit -m "added a"
$ echo "b file" > b
$ hg add b
$ hg commit -m "added b"
你可以得到这个问题你现在有两个版本,最新的有文件a
和b
。如果更新回第一次修订,并创建一个不同的文件b
,那么你得到的麻烦:
$ hg update 0
$ echo "other b file" > b
$ hg update
abort: untracked file in working directory differs from file in requested
revision: 'b'
正常的解决方案是之前更新提交。你通常不应该用脏的工作副本更新(“脏”意味着hg status
不是空的)。 Mercurial确实支持这种更新,但只有在知道自己在做什么的情况下才应该使用它们。
所以继续上面的例子,我们可以提交新b
然后合并:
$ hg add b
$ hg commit -m "added new b"
$ hg merge
这给在b
冲突,因为这两个版本包含b file
和other b file
,分别。解决冲突并提交:
$ hg commit -m "merged two bs"
另一种方法是从工作副本中删除该文件。 这就是我将要处理的情况:.DS_Store
文件不应该被首先跟踪。他们在Mac OS X上存储了一些文件夹信息,这不是您的源代码的一部分。所以,你做
$ rm .DS_Store
$ hg update
更新复活.DS_Store
文件。现在,您想告诉水银,它应该停止跟踪该文件:
$ hg forget .DS_Store
,你也想告诉水银从现在开始忽略这样的文件:
$ echo "syntax: glob" >> .hgignore
$ echo ".DS_Store" >> .hgignore
$ hg commit -m "removed .DS_Store file, ignored from now on"
非常感谢你这样详细的答复! – Andrew 2012-01-17 07:07:17