gitversion-controlgit-clean

Git: Exclude a file with git clean


i'm working on a big python project, and i'm really sick if .pyc and *~ files. I'd like to remove them. I've seen that the -X flag of git clean would remove untracked files. As you can imagine, i'm not tracking .pyc nor *~ files. And that would make the trick. The problem is that i've a local_settings.py file that I'd like to keep after the git clean.

So, this is what I've got.

.gitignore:

*.pyc
*~
local_settings.py

When I execute this command:

git clean -X -n -e local_settings.py

I get this list of results:

Would remove local_settings.py
Would remove requirements.txt~
Would remove (other bunch of) ~ files
Would remove (other bunch of) pyc files

I don't want to remove the local_settings.py file. I've tryed lots of ways to do it, but i can't figure out how to acomplish it.

git clean -X -n -e local_settings.py
git clean -X -n -e "local_settings.py"
git clean -X -n --exclude=local_settings.py
git clean -X -n --exclude="local_settings.py"

And nothing seems to work.

EDIT:

For posterity, the right way to do it is (Thanks @Rifat):

git clean -x -n -e local_settings.py # Shows what would remove (-n flag)
git clean -x -f -e local_settings.py # Removes it (note the -f flag)

Solution

  • The difference is the capital X you're using. Use a small x instead of the capital one. Like in: git clean -x.

    git clean -x -n -e local_settings.py # Shows what would remove (-n flag)
    git clean -x -f -e local_settings.py # Removes it (note the -f flag)
    

    From the git documentation:

       -x
           Don't use the standard ignore rules read from .gitignore (per
           directory) and $GIT_DIR/info/exclude, but do still use the ignore
           rules given with -e options. This allows removing all untracked
           files, including build products. This can be used (possibly in
           conjunction with git reset) to create a pristine working directory
           to test a clean build.
    
       -X
           Remove only files ignored by git. This may be useful to rebuild
           everything from scratch, but keep manually created files.