version-control - 添加新文件后如何更新到mercurial中的最新版本?

标签 version-control mercurial dvcs

我在项目目录中创建了一个存储库。我已经添加了所有文件并进行了一些提交。然后我将新文件添加到项目和存储库。之后我回到了早期版本,现在我无法更新到最新版本。后 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"

您现在有两个修订版,最新的有文件 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然后 merge :
$ 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文件。您现在想告诉 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/

相关文章:

unix - 如何忘记 .hgignore 列出的内容?

mercurial - 在 Mercurial (Hg) 中,列出自修订版 4822 以来我修改的所有文件的好方法是什么?

sqlite - 在 VCS 中包含 SQLite 是否有任何值(value)

android - 如何让 Android 应用程序检查是否为最新版本(如最新的 Google Play 商店版本)?

version-control - 为什么 RTC 将我的正常待处理更改识别为 "unresolved"?

version-control - 哪些版本控制程序可以在更改集成之前强制运行和通过测试?

git - Git相当于 Mercurial 添加+ Mercurial 差异?

windows - 如何让 Windows 上的 Mercurial 使用 SSH key 进行推/拉?

git - 我如何告诉 Emacs 我的 git 分支已经改变了?

version-control - 如何在 TFS/Codeplex 托管项目上创建分支?