這意味着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
文件。現在,您想告訴水銀,它應該停止跟蹤該文件:
$ hg forget .DS_Store
,你也想告訴水銀從現在開始忽略這樣的文件:
$ echo "syntax: glob" >> .hgignore
$ echo ".DS_Store" >> .hgignore
$ hg commit -m "removed .DS_Store file, ignored from now on"
非常感謝你這樣詳細的答覆! – Andrew 2012-01-17 07:07:17