Re: Large-scale configuration backup with GIT?
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Sep 2, 2007, 21:49 UTC
- Message-ID
- <7vd4x0pwjm.fsf@gitster.siamese.dyndns.org>
- In-Reply-To
- <20070902201724.GB10567@lug-owl.de>
Jan-Benedict Glaw <jbglaw@lug-owl.de> writes:
Show 13 quoted lines
> I'm just thinking about storing our whole company's configuration into > GIT, because I'm all too used to it. That is, there are configuration > ... > In both cases, I'd be left with a good number of GIT repos, which > should probably be bound together with the GIT subproject functions. > However, one really interesting thing would be to be able to get the > diff of two machine's configuration files. (Think of machines that > *should* be all identical!) For this, it probably would be easier to > not put each machine into its own GIT repo, but to use a single one > with a zillion branches, one for each machine. > > Did anybody already try to do something like that and can help me with > some real-life experience on that topic?
This is something similar to what I and others in my group did long time before git was even invented. I'd suggest you go in the opposite direction.
If you have 5 configurations, each of which have 20 machines that _should_ share that configuration (modulo obvious differences that come from hostname, IP address assignment, etc), then
- You keep track of 5 configurations; in git, you would probably maintain them as 5 branches.
- You have a build mechanism to create systemic variation among 20 machines that shares one configuration; this can be different per branch. So if you have 20 solaris machines all should share logically the same configuration, you would:
$ git checkout solarisconf
... tweak the config for machine #27, adjusting for
... hostname, IP address variation, etc...
$ make target=solaris27 output=../solaris27.expectMake that makefile produce the output in named directory;
- You get the config dump from your machines (your "staging area"), as you planned. Then after running the above, you could:
$ cd ..
$ diff -r solaris27.expect solaris27.actualif your "staging area" for machine #27 is "solaris27.actual".
The difference you would see is something done by *hand* on the machine, which you would want to propagate back to the solaris configuration *source* you keep track in git. For some changes, you may even want to adjust that single manual change done on machine #27 so that you do not have to do that on other 19 solaris boxes manually, by adjusting the build procedure in the solarisconf branch.