How can I track system-specific config files in a repo/project?

I would recommend using:

  • a template config file (a file with variable name in place of the host and port value)
  • a script able to replace those variable names with the appropriate values depending on the environment (detected by the script)

The Git solution is then a git attribute filter driver (see also GitPro book).

A filter driver consists of a clean command and a smudge command, either of which can be left unspecified.
Upon checkout, when the smudge command is specified, the command is fed the blob object from its standard input, and its standard output is used to update the worktree file.
Similarly, the clean command is used to convert the contents of worktree file upon check-in.

That way, the script (managed with Git) referenced by the smudge can replace all the variables by environement-specific values, while the clean script will restore its content to an untouched config file.

clean smudge

When you checkout your Git repo on a prod environment, the smudge process will produce a prod-like config file in the resulting working tree.

Leave a Comment