在不从您和其他人的文件系统中删除文件的情况下取消跟踪文件?

Untracking files without them being deleted from yours AND OTHERS' file system?

我使用 hg forget <files> 取消跟踪某些文件,而没有像使用 hg rm <files> 那样将它们从我的文件系统中删除。我提交了更改,运行 hg status 按预期将这些文件列为未跟踪 ? <files>。然后我将变更集推送到我们的远程存储库,其他人拉取并更新,然后 mercurial 从他们的文件系统中删除了这些文件!

为什么 Mercurial 无法识别这些文件在其他人的存储库副本上未被 hg forget 跟踪,就像在原始更改的副本中一样?

他们是另一种取消跟踪文件而不从任何人的文件系统中删除文件的方法吗?

Git 和 Mercurial 在这里都有同样的问题:你有一些提交 O(一个旧的),其中有一个文件 F.现在你从 O 更新到新提交 N,它说 "there is no file F".

版本控制系统应该做什么?嗯,这取决于 F 被删除的原因,不是吗?如果我们把F去掉,因为以前用过,现在是无用的杂乱,应该去掉。

那么,为什么删除 no-longer-used 是正确的,但保留 accidentally-committed 也是正确的?鉴于 VCS 只能看到提交 O 同时具有 no-longer-used 和 [=33=,VCS 应该如何知道这两者中的哪一个是指] accidentally-committed,而提交 N 没有文件?

(据我所知,Git 和 Mercurial 都没有很好的答案。)