我以前用过这样的东西;这就是它的工作原理.
回购设置
>创建一个git仓库,“etc_files”.
>为每种机器类型创建一个分支,例如“server / www”,“server / dev”等.
> git支持分支名称中的斜杠.这有助于我将树枝直接放在脑海中.
>如果您的机器足够少,则可以为每台机器分配一个分支.
>为每个共享基础架构创建一个分支,例如“modules / apache”,“modules / cups”等
>这些分支用于保存所有机器之间相同的文件,例如/etc/resolv.conf.这些将是你现在保存在“svn:externals”repos中的文件.
建立一个新机器
>在新计算机上,克隆git repo并检查该计算机类型的分支.
>我将其设为只读克隆,以防止人们在未经测试的情况下从生产机器提交更改.
>设置一个cron作业,每天自动git拉回购.
改变机器分支
更改单个机器分支中的代码很简单;只需git checkout开发环境中的相应分支,进行更改,然后将它们提交回中央存储库.该分支中的所有计算机将在下次运行cron作业时自动获取更改.
更改模块分支
更改模块分支的代码只是稍微棘手,因为它涉及两个步骤:
> git checkout相应的模块分支
>进行更改并将其提交到集中式服务器.
> git checkout使用该模块分支的每个机器分支,然后将模块分支合并到其中. git会发现你之前已经合并了那个模块分支,并且只注意到自那个最后一个普通父代以来发生的变化.
该方法具有优点和缺点.一个好处是我可以对模块分支进行更改并将其应用到需要它的机器分支,这使得机器分支不会保留旧版本,直到它们准备好.因此,缺点是您必须记住将模块分支合并到可能正在使用它的每个机器分支中.我使用一个遍历提交树的脚本并自动为我做这个合并,但仍然很痛苦.
作为替代方案,较新版本的git支持称为“@L_404_4@”的东西:
Submodules allow foreign repositories to be embedded within a dedicated subdirectory of the source tree,always pointed at a particular commit.
这将允许您构建一些类似“svn:externals”树的东西,然后您可以以与现在相同的方式更新.