Remove history for everything except a list of files using git filter-branch

后端 未结 3 1338
慢半拍i
慢半拍i 2021-01-06 05:45

I\'m trying to move some files between two git repositories repo1 and repo2. I have a short list of files I\'d like to move (preserving history).

3条回答
  •  一向
    一向 (楼主)
    2021-01-06 06:25

    With Git 2.24 (Q4 2019), git filter-branch is deprecated.

    The equivalent would be, using newren/git-filter-repo, and its example section:

    If you have a long list of files, directories, globs, or regular expressions to filter on, you can stick them in a file and use --paths-from-file; for example, with a file named stuff-i-want.txt with contents of

    README.md
    guides/
    tools/releases
    glob:*.py
    regex:^.*/.*/[0-9]{4}-[0-9]{2}-[0-9]{2}.txt$
    tools/==>scripts/
    regex:(.*)/([^/]*)/([^/]*)\.text$==>\2/\1/\3.txt
    

    then you could run

    git filter-repo --paths-from-file stuff-i-want.txt
    

    In your case, stuff-i-want.txt would be:

    libraryname/file1
    libraryname/file2
    tests/libraryname/file3
    

    As kubanczyk points out in the comments:

    Works well on Ubuntu 20.04, you can just pip3 install git-filter-repo since it's stdlib-only and doesn't install any dependencies.

    On Ubuntu 18 it's incompatible with distro's git version, but it's easy to enough to run it on a docker run -ti ubuntu:20.04

提交回复
热议问题