【问题标题】:How do you remove big files from history in mercurial?如何从 mercurial 的历史记录中删除大文件?
【发布时间】:2012-04-23 14:21:06
【问题描述】:

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

使用 mercurial 可以做到这一点吗?

【问题讨论】:

  • 不理解“离题”关闭投票;这个问题非常切题。
  • @Graham,你是说你认为软件工程师应该使用版本控制吗?那是疯狂的谈话......

标签: version-control mercurial dvcs


【解决方案1】:

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

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

[extensions]
convert =

创建要排除的文件映射:

exclude path/to/file1
exclude path/to/file2

然后转换repo:

hg convert srcrepo destrepo --filemap <map>

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

initializing destination destrepo repository
abort: invalid mode ('r') or filename

只需添加--splicemap &lt;nonexistent file&gt; 选项即可解决问题。

【讨论】:

  • 感谢您的回答! --filemap 的文档非常稀缺,您能否提供一个更详细地解释它的链接?
  • 哇,太棒了!非常感谢。
  • 我刚刚测试了你的方法。这些文件已从工作目录中删除,但它们似乎仍位于 .hg/store/data 中。你也知道如何从那里删除它们吗?
  • @ChrisKrycho,它可以自动化。 hg locate set:binary 将在工作文件夹中找到任何二进制文件。 hg log -r "file('set:binary() and copied()')" 可以找到存在二进制文件的任何修订版并制作了副本。一点点脚本,不会很痛苦。
  • 次要注意:您可以在不编辑 hgrc 的情况下加载转换扩展。如果这是一次性的事情(对我来说),我宁愿那样做。 hg --config=extensions.convert= convert --filemap map.txt old new.
猜你喜欢
  • 2011-02-10
  • 2014-06-19
  • 2020-03-20
  • 1970-01-01
  • 1970-01-01
  • 2017-10-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多