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

Gil*_*ili 14 mercurial

我理解如何从历史记录中删除整个变更集,但目前尚不清楚如何删除子集.

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

tgh*_*ghw 18

因为修订标识(例如a8d7641f ...)基于变更集的散列,所以实际上不可能从历史记录中删除变更集的子集.

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


Ale*_*lex 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但没有文件

PS.在"上层"仓库中,您必须删除所有变更集重新推送新的仓库.

PPS.我实际上写了一篇关于此的博文,其中有更多细节(包括在Bitbucket中剥离更改等).

  • 随着新团队成员的加入,我怀疑我们可能每年都会这样做一次,以保持回购利益从所有的菜鸟提交. (2认同)