我在项目目录中创建了一个存储库。我已经添加了所有文件并进行了一些提交。然后我将新文件添加到项目和存储库。之后我回到了早期版本,现在我无法更新到最新版本。后 hg update tip
我收到这条消息:
abort: untracked file in working directory differs from file in requested
revision: '.DS_Store'
我是 mercurial 的新手。我怎样才能解决这个问题?
最佳答案
这意味着 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
然后 merge :$ 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"
关于version-control - 添加新文件后如何更新到mercurial中的最新版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8890556/