Как пишет Джон, 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 .