2012-01-06 6 views
2
working directory 

を削除するコミット...内部のいくつかのディレクトリコピーし水銀の更新は、すべての変更

hg commit (resulted in rev3) 

をしたいくつかのファイルを変更しました。 REV3の状態に正確に戻って取得する方法

hg add 
hg commit (resulted in rev4 - tip) 

をしました。 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

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を使用することです。

関連する問題