working directory
做了
hg commit (resulted in rev3)
复制了一些目录......改变了一些文件。
hg add
hg commit (resulted in rev4 - tip)
如何准确回到 rev3 的状态。 hg update 3
会将文件更改为 rev3 中的状态,但它也会将所有复制的目录保留在内。我想获得没有复制的目录和文件的工作目录,这些目录和文件是在rev3之后添加的。
答案 0 :(得分: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
不存在......
您确定在提交之前在新目录中添加了所有内容吗?
答案 1 :(得分:1)
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。