2012-01-06 44 views
2
working directory 

沒過汞柱更新一次提交消除任何改變

hg commit (resulted in rev3) 

複製了一些目錄裏面......改變了一些文件。難道

hg add 
hg commit (resulted in rev4 - tip) 

如何找回確切地REV3的狀態。 hg update 3會將文件更改爲它們在rev3中的狀態,但它也會將所有複製的目錄留在裏面。我想獲取沒有複製的目錄和文件的工作目錄,它們是在rev3之後添加的。

回答

2

這並不適合我發生:

> hg init 
> mkdir first 
> jed first/foo.txt 
> hg add 
    adding first/foo.txt 
> hg commit -m asd 
> mkdir second 
> jed second/foo.txt 
> hg add 
    adding second/foo.txt 
> hg commit -m asd 
> hg update 0 

現在first存在,但second不...

你確定你在新的目錄你的提交前加入的一切嗎?

+0

可能......不知道了,刪除它。但很高興知道這不是預期的行爲,所以至少我會知道這是我的錯誤...只是嘗試過你的例子,所以是的,這可能是錯誤的根源。 – Rook 2012-01-06 18:00:26

1

像Jon寫道,Mercurial通常會嘗試自行清理。所以當你hg update你應該回到你的承諾。我猜你看到的是以下行爲:

$ hg init repo 
$ cd repo 
$ echo "# some C program" > foo.c 
$ hg add foo.c 
$ hg commit -m first 
$ mkdir dir 
$ echo "$ other C program" > dir/bar.c 
$ hg add dir/bar.c 
$ hg commit -m second 
$ echo "object file" > dir/bar.o 
$ hg update 0 
0 files updated, 0 files merged, 1 files removed, 0 files unresolved 
$ ls 
foo.c dir 
$ ls dir 
bar.o 

所以未跟蹤dir/bar.o文件已經落伍,但跟蹤dir/bar.c文件已被刪除正確。即:Mercurial 將不會刪除未跟蹤文件,因爲它不知道它們是否包含有價值的數據。即使這些文件被.hgignore中的模式忽略,也是如此。如果該目錄只包含跟蹤的dir/bar.c文件,那麼當您更新到不需要它的修訂版時,該目錄將被完全刪除。

清理未跟蹤文件的正常方法是使用purge extension