Mercurial: Remove file from all changesets

前端 未结 2 1535
故里飘歌
故里飘歌 2020-12-31 06:34

I understand how to remove an entire changeset from history but it\'s not clear how to remove a subset instead.

For example, how do I remove all DLL files from an ex

相关标签:
2条回答
  • 2020-12-31 07:28
    1. Make sure all your teammates have pushed their local changes to the central repo (if any)
    2. Backup your repository
    3. Create a "map.txt" file with the following content:
      # this filemap is used to exclude specific files
      exclude "subdir/filename1.ext"
      exclude "subdir/filename2.ext"
      exclude "subdir2"
    4. Run this command:
      hg convert --filemap map.txt c:/oldrepo c:/newrepo
      NOTE: You have to use "forward-slash" in paths, even on windows.
    5. Wait and be patient
    6. Now you have a new repo at c:\newrepo but without the files

    PS. In the "upper" repo you have to remove all changesets and re-push your new repo.

    PPS. I actually wrote a blog post about this that has more details (including stripping the changesest in Bitbucket etc.

    0 讨论(0)
  • 2020-12-31 07:29

    Because the revision ids (e.g. a8d7641f...) are based on a hash of the changeset, it's not really possible to remove a subset of a changeset from history.

    However, it is possible to create a new repo with a parallel history, except for a certain set of files, by using the Convert extension. You'll be converting a Mercurial repo to a Mercurial repo, using the filemap to exclude the files you don't want by adding excludes. This will create a new, unrelated repository, which means that any clones people have won't be able to pull from it any more, and will have to re-clone from this new repo.

    0 讨论(0)
提交回复
热议问题