Search code examples
git

How to store a git config as part of the repository?


I'm using filters to mangle files during checkout like described here. Now the problem is that filter definition is only stored in my local configuration file:

$ cat .git/config
....
[filter "dater"]
        smudge = /home/.../expand_date
        clean = perl -pe \"s/\\\\\\$Date[^\\\\\\$]*\\\\\\$/\\\\\\$Date\\\\\\$/\"

If my coworkers want to benefit from this Date expansion, they need to copy my filter definition. And if I change it, I need to notify them, etc..

So can I store this filter definition part of .git/config in repository and make git use it?


Solution

  • There are 3 supported scopes of .gitconfig file: --system, --global, --local. You can also create a custom configuration file, and include it in one of the supported files.

    For your needs custom is the right choice. Instead of writing your filter in .git/config you should save it in .gitconfig file in your repository root:

    your-repo/
    │
    ├── .git/
    │   ├── config
    │
    ├── .gitconfig
    │
    

    Create the .gitconfig with your filter and commit the changes. Then your colleagues will always keep it updated -- but they will have to include it manually. It is not possible to automatically include your custom configuration file through git alone, because it creates a security vulnerability.

    To apply this configuration for a single repository, each user will need to run the following command in your-repo/:

    git config --local include.path ../.gitconfig
    

    Reference: https://git-scm.com/docs/git-config#_includes

    Be careful not to store personal data in the custom .gitconfig, like user.*, keep those in your global .gitconfig.