其他提示

从Mercurial中删除特定文件是正确的,因为这样做会破坏存储库中的所有变更集ID。更改变更集ID时,每个人都必须重新克隆存储库。有关修改Mercurial中历史记录的后果的信息,请参阅有关编辑历史记录的Wiki页面

如果您可以(公司内部存储库),那么请查看转换扩展名。它可以执行 hg→hg 转换,并且有一个 - filemap 参数,可用于排除文件等。

可以在本地,但不是全局,并且在添加文件之后更改每个提交的ID。为了使更改成为可能,您需要访问存储库的每个副本,特别是那些被拉出或推送的副本。

那就是说,我遵循了Mercurial wiki上描述的编辑历史序列从我的某个存储库中删除文件。此序列假定修订版1301:5200a5a10d8b将文件 path /添加到/ badfile.cfg ,后续版本中未更改该文件:

  1. .hgrc

    中启用MQ扩展
    [extensions]
    mq =
    
  2. 从上游拉出最近的更改。

    hg pull
    
  3. 将从文件添加开始的所有内容导入MQ:

    hg qimport -r 1301:tip
    hg qpop -a
    
  4. 从添加该文件的提交中删除该文件。

    hg qpush 1301.diff
    hg forget path/to/badfile.cfg
    hg qrefresh
    
  5. 将补丁转换为新的Mercurial版本。

    hg qpush -a
    hg qfinish -a
    
  6. 将新版本推向上游。

    hg push -f
    
  7. 在上游存储库和每个其他副本上,删除旧版本。

    hg strip 5200a5a10d8b
    
  8. 警告:除非您小心,否则此步骤可能会破坏工作。如果自上次你从上游撤出以来有人提交了任何东西,那么你必须在剥离之前重新开始这项工作。不幸的是, rebase 扩展名在这里没有帮助;您将不得不再次使用MQ,将新提交转换为您应用于新提示的补丁。

    祝你好运。

它可以在10分钟。在一个单一的储存库,虽然有后果。

如何:使用汞的转换作为描述 这个优秀的指南.基本上,你"转换"一个汞回购入一个新的汞的回购,但你获得指定一个列表的文件排除在转换。这是一个摘录的关键步骤:

Make sure all your teammates have pushed their local changes to the central repo (if any)
Backup your repository
Create a "map.txt" file:

# this filemap is used to exclude specific files
exclude "subdir/filename1.ext"
exclude "subdir/filename2.ext"
exclude "subdir2"

Run this command:
hg convert --filemap map.txt c:/oldrepo c:/newrepo
NOTE: You have to use "forward-slash" in paths, even on windows.
Wait and be patient
Now you have a new repo at c:\newrepo but without the files

作为的后果...

  • 所有变更集Id后文件要排除的加入将是不同的
  • 新的"干净的"主要储存库将手放在现有的一个
  • 所有团队成员将要作出新的克隆的主要仓库
  • 任何其他服务的整合汞可能需要注意(例如问题跟踪,一个代码的审查系统等等)。

hg移植,然后hg strip

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top