如何从mercurial中删除历史记录中的大文件?

sta*_*tti 34 version-control mercurial dvcs

我刚刚创建了一个由其他回购的异构生态系统创建的mercurial repo.在我将它发布给我的同事之前,我想尽可能地清理它.为此,我想从历史中删除一些大的旧文件(假装它们从未存在过),因此repo会更小.

mercurial这可能吗?

Mar*_*nen 35

查看convert扩展名,尤其是--filemap选项.

通过添加以下内容启用mercurial.ini:

[extensions]
convert =
Run Code Online (Sandbox Code Playgroud)

创建要排除的文件映射:

exclude path/to/file1
exclude path/to/file2
Run Code Online (Sandbox Code Playgroud)

然后转换回购:

hg convert srcrepo destrepo --filemap <map>
Run Code Online (Sandbox Code Playgroud)

请注意,Mercurial 2.1.1中存在一个错误,导致上述命令出错:

initializing destination destrepo repository
abort: invalid mode ('r') or filename
Run Code Online (Sandbox Code Playgroud)

只需添加--splicemap <nonexistent file>选项即可解决问题.

  • 次要注意:您可以在不编辑hgrc的情况下加载转换扩展.如果这是一次性的事情(对我而言),我宁愿这样做.`hg --config = extensions.convert = convert --filemap map.txt old new`. (4认同)
  • @static_rtti,哈!那讲得通.重命名必须考虑到...... (2认同)
  • @ChrisKrycho,它可以自动化.`hg locate set:binary`将在工作文件夹中找到任何二进制文件.`hg log -r"文件('set:binary()和copied()')"`可以找到存在二进制文件的任何修订版本并进行复制.一点点脚本,它不会是痛苦的. (2认同)