And*_*rew 5 version-control mercurial dvcs
我在项目目录中创建了一个存储库.我添加了所有文件并做了一些提交.然后我将新文件添加到项目和存储库中.之后我回到了早期版本,现在我无法更新到最新版本.之后hg update tip我得到这个消息:
abort: untracked file in working directory differs from file in requested
revision: '.DS_Store'
Run Code Online (Sandbox Code Playgroud)
我是善变的新手.我怎样才能解决这个问题?
Mar*_*ler 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"
Run Code Online (Sandbox Code Playgroud)
你现在有两个版本,最新的文件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'
Run Code Online (Sandbox Code Playgroud)
通常的解决方案是在更新之前提交.通常不应使用脏工作副本进行更新("脏"表示hg status非空).Mercurial确实支持这样的更新,但是只有在知道自己在做什么的情况下才应该使用它们.
因此,要继续上面的示例,我们可以提交新的b然后合并:
$ hg add b
$ hg commit -m "added new b"
$ hg merge
Run Code Online (Sandbox Code Playgroud)
b由于两个版本分别包含b file和other b file,因此会产生冲突.解决冲突并提交:
$ hg commit -m "merged two bs"
Run Code Online (Sandbox Code Playgroud)
另一种方法是从工作副本中删除该文件.这就是我要做的事情: .DS_Store首先不应该跟踪文件.它们在Mac OS X上存储了一些文件夹信息,这不是源代码的一部分.所以你也是
$ rm .DS_Store
$ hg update
Run Code Online (Sandbox Code Playgroud)
更新恢复了.DS_Store文件.您现在想告诉Mercurial它应该停止跟踪文件:
$ hg forget .DS_Store
Run Code Online (Sandbox Code Playgroud)
而且你还想告诉Mercurial从现在开始忽略这些文件:
$ echo "syntax: glob" >> .hgignore
$ echo ".DS_Store" >> .hgignore
$ hg commit -m "removed .DS_Store file, ignored from now on"
Run Code Online (Sandbox Code Playgroud)