How do I configure git to ignore some files locally?

前端 未结 11 887
深忆病人
深忆病人 2020-11-22 01:03

Can I ignore files locally without polluting the global git config for everyone else? I have untracked files that are spam in my git status but I don\'t want to commit git c

11条回答
  •  隐瞒了意图╮
    2020-11-22 01:46

    Both --assume-unchanged and --skip-worktree are NOT A CORRECT WAY to ignore files locally... Kindly check this answer and the notes in the documentation of git update-index. Files that for any reason keep changing frequently (and/or change from a clone to another) and their changes should not be committed, then these files SHOULD NOT be tracked in the first place.

    However, the are two proper ways to ignore files locally (both work with untracked files). Either to put files names in .git/info/exclude file which is the local alternative of .gitignore but specific to the current clone. Or to use a global .gitignore (which should be properly used only for common auxiliary files e.g. pyz, pycache, etc) and the file will be ignored in any git repo in your machine.

    To make the above as kind of automated (adding to exclude or global .gitignore), you can use the following commands (add to your bash-profile):

    • Per clone local exclude (Note that you should be in the root of the repository when calling the command because of using the relative path), change ##FILE-NAME## to .git/info/exclude
    • Global .gitignore, first make global .gitignore here then change ##FILE-NAME## to ~/.gitignore

    Linux

    alias git-ignore='echo $1 >> ##FILE-NAME##'
    alias git-show-ignored='cat ##FILE-NAME##'
    git-unignore(){
      GITFILETOUNIGNORE=${1//\//\\\/}
      sed -i "/$GITFILETOUNIGNORE/d" ##FILE-NAME##
      unset GITFILETOUNIGNORE
    }
    

    MacOS (you need the .bak for sed inplace modifications (i.e. you are forced to add a file extension to inplace sed. i.e. make a backup before replacing something), therefore to delete the .bak file I added rm filename.bak)

    alias git-ignore='echo $1 >> ##FILE-NAME##'
    alias git-show-ignored='cat ##FILE-NAME##'
    git-unignore(){
      GITFILETOUNIGNORE=${1//\//\\\/}
      sed -i.bak "/$GITFILETOUNIGNORE/d" ##FILE-NAME##
      rm ##FILE-NAME##.bak
      unset GITFILETOUNIGNORE
    }
    

    Then you can do:

    git-ignore example_file.txt
    git-unignore example_file.txt

提交回复
热议问题