2012-01-17 44 views
5

我已经在项目的目录中创建了一个存储库。我已经添加了所有文件并进行了一些提交。然后我将新文件添加到项目和存储库。之后,我回到了早期版本,现在我无法更新到最新版本。 hg update tip后,我得到这个消息:如何在添加新文件后更新到mercurial的最新版本?

abort: untracked file in working directory differs from file in requested 
revision: '.DS_Store' 

我是新来的善变。我怎样才能解决这个问题?

回答

12

这意味着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" 

你可以得到这个问题你现在有两个版本,最新的有文件ab。如果更新回第一次修订,并创建一个不同的文件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 fileother 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" 
+1

非常感谢你这样详细的答复! – Andrew 2012-01-17 07:07:17

相关问题