views:

114

answers:

2

In Git, how can I organize work to track local config files of a library, which is a git submodule?

In details:

the library has normal files that are tracked, and default config files that are in it's folder, but not tracked, in order to avoid resetting or overwriting them (they're listed in .gitignore). All the files are in lib's folder or subfolders.

I started tracking one of the projects, that use this lib, in Git too. Now there's a dilemma:

  • if I make the lib in this project a submodule, I won't be able to track the config files (Git will ignore them, since they're in the submodule folder).

  • tracking everything as a big project is a bad idea, as I understand.

  • if I do track config files in the library, how can I avoid resetting them to default values? Do I make a branch in the working project and pull from master every time? Then, what if I edit the library and a config file in it? This must cause a merge conflict, doesn't it?

I guess this is not new, but I couldn't find any advice. I'll appreciate learning from your experience guys.

+3  A: 

When using a submodule, you should avoid making any modification because of the container (here: the project using the lib), because it will create a new revision on the history of the submodule.

It would be possible, for instance, for the lib, to reference config template files that can be the base for :

  • default value config files generation (the lib has a default value file archived, which can be used to generate a complete but not tracked config file)
  • or a custom config file generation (the project has its own config file values, and use it to generate at the same place within the lib a non-tracked config file)

A "config file template with tokenized values in it, and a script transforming that config.template file into a private (and ignored) config file" is the approach I suggested in this SO question about merge management.

Other more general advices on config files can be found in this SO question.

VonC
Thanks for the links!
culebrón
+2  A: 

track your config file in main project directory and put a symlink into library subdirectory?

git add lib.conf
ln -s ../lib.conf lib/

or do I miss something?

Michael Krelin - hacker
Cool! Damn, I'm still thinking like in Windows, one-direction!
culebrón