Mercurial:从所有更改集中删除文件

时间:2010-08-24 15:54:02

标签: mercurial

我了解如何从历史记录中remove an entire changeset,但目前尚不清楚如何删除子集。

例如,如何在保留源代码的同时从现有变更集中删除所有DLL文件?

2 个答案:

答案 0 :(得分:18)

由于修订版ID(例如a8d7641f ...)基于变更集的哈希值,因此无法从历史记录中删除变更集的子集。

但是,可以使用Convert扩展名创建具有并行历史记录的新仓库,但某些文件集除外。您将使用文件映射将Mercurial仓库转换为Mercurial仓库,以通过添加exclude来排除您不想要的文件。这将创建一个新的,不相关的存储库,这意味着人们所拥有的任何克隆都将无法再从中获取,并且必须从这个新的存储库中重新克隆。

答案 1 :(得分:13)

  1. 确保所有队友都将他们的本地更改推送到了 中央回购(如果有的话)
  2. 备份您的存储库
  3. 使用以下内容创建“map.txt”文件:
    # this filemap is used to exclude specific files
    exclude "subdir/filename1.ext"
    exclude "subdir/filename2.ext"
    exclude "subdir2"
  4. 运行此命令:
    hg convert --filemap map.txt c:/oldrepo c:/newrepo
    注意:您必须在路径中使用“正斜杠”,即使在窗口上也是如此。
  5. 等待并耐心等待
  6. 现在您在c:\newrepo处有一个新的回购,但没有文件
  7. PS。在“上层”回购中,您必须删除所有更改集重新推送您的新回购。

    PPS。我实际上写了一个关于这个的blog post,它有更多的细节(包括在Bitbucket中删除更改等。