我在项目目录中创建了一个存储库。我添加了所有文件并做了一些提交。然后我将新文件添加到项目和存储库中。之后我回到了早期版本,现在我无法更新到最新版本。 hg update tip
之后我收到此消息:
abort: untracked file in working directory differs from file in requested
revision: '.DS_Store'
我是善变的新手。我该如何解决这个问题?
答案 0 :(得分: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"
您现在有两个版本,最新版本有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
文件。您现在想告诉Mercurial它应该停止跟踪文件:
$ hg forget .DS_Store
并且您还想告诉Mercurial从现在开始忽略这些文件:
$ echo "syntax: glob" >> .hgignore
$ echo ".DS_Store" >> .hgignore
$ hg commit -m "removed .DS_Store file, ignored from now on"