Git - Remove All of a Certain Type of File from the Repository

前端 未结 5 1429
情歌与酒
情歌与酒 2020-12-31 05:54

How do I remove all of a certain type of file from the Repository? I\'m using

git filter-branch --index-filter \'git rm -rf --cached **/*.jar\'
相关标签:
5条回答
  • 2020-12-31 06:08
    git filter-branch --index-filter 'git rm -rf --cached **/*.jar'
    

    should work, but it's a bit silly because git globs (*) match path separators. So, **/*.jar is equivalent to *.jar.

    This also means that */a*.jar matches dir1/abc/dir2/log4j.jar. If you want to match something like **/a*.jar (all jars whose name starts with a in any directory), you should use find. Here's a command to remove any jars whose names start with a or b, and any jars in dir1/dir2, and any .txt file in any directory:

    git filter-branch --index-filter 'git rm -rf --cached "*.txt" "dir1/dir2/*.jar" $(find -type f -name "a*.jar" -o -name "b*.jar")'
    

    References: pathspec section of git help glossary.

    0 讨论(0)
  • 2020-12-31 06:12

    Although it's not a git command, but for those who are interested in how to accomplish that on linux machine, you can use

    git ls-files | grep "\.sh$" | { while IFS= read -r line; do git rm --cached "$line"; done }
    

    Here we list all of files in git index and forward that output to grep command to filter only .sh files and than for each file we perform git rm --cached <file>.

    0 讨论(0)
  • 2020-12-31 06:22

    The easiest way I've found is to use the BFG Repo-Cleaner

    The instructions on the project page are clear. The command you would use is something like:

    bfg --delete-files "*.jar"  my-repo.git
    

    BFG will clean the history of the repo of all files ending in the .jar extension. You can then inspect the result before pushing it back to the server.

    0 讨论(0)
  • 2020-12-31 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:

    cd repo
    git filter-repo --path-glob '*.jar' --invert-paths
    

    That will remove any jar file from the repository history.

    0 讨论(0)
  • 2020-12-31 06:30

    You simply have to run this in order to remove all your jars from the index:

    git rm -r --cached **/*.jar
    

    Run this command from your root directory of the project and it will clean up and will remove all your file only from the staging area.

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