2012-01-17 45 views
5

我已經在項目的目錄中創建了一個存儲庫。我已經添加了所有文件並進行了一些提交。然後我將新文件添加到項目和存儲庫。之後,我回到了早期版本,現在我無法更新到最新版本。 hg update tip後,我得到這個消息:如何在添加新文件後更新到mercurial的最新版本?

abort: untracked file in working directory differs from file in requested 
revision: '.DS_Store' 

我是新來的善變。我怎樣才能解決這個問題?

回答

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" 

你可以得到這個問題你現在有兩個版本,最新的有文件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然後合併:

$ 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文件。現在,您想告訴水銀,它應該停止跟蹤該文件:

$ hg forget .DS_Store 

,你也想告訴水銀從現在開始忽略這樣的文件:

$ echo "syntax: glob" >> .hgignore 
$ echo ".DS_Store" >> .hgignore 
$ hg commit -m "removed .DS_Store file, ignored from now on" 
+1

非常感謝你這樣詳細的答覆! – Andrew 2012-01-17 07:07:17

相關問題