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

Git

Git Problem Overview


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?

Git Solutions


Solution 1 - Git

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.

Solution 2 - Git

You can not use .gitconfig file in a git repository by default, but you can link to it so the git config will be versioned.

You can link to it like that:

[include]
  path = ../.gitconfig

I have created a simple script gitconfig.sh which do it for you (much faster than copy) + simple .gitconfig file so if you want, take a look to this repo https://github.com/HoBi/dotfiles.


EDIT: I have deleted the file, but you can find it here https://github.com/tenhobi/dotfiles/blob/7e4376c006c508370b82bc7bd37173fab51dbd01/git/.gitconfig.sh

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionZaar HaiView Question on Stackoverflow
Solution 1 - GitAlexander YancharukView Answer on Stackoverflow
Solution 2 - GittenhobiView Answer on Stackoverflow