保持配置文件在SVN下的最佳方式?

问题描述:

在版本控制下保存配置文件(例如httpd.conf,my.cnf,.bashrc ...)的最佳方法是什么? 在ADITION的版本效益,我想解决备份工作为好,这样我就可以带来一个全新的服务器和结算(或出口)的配置文件从SVN直接保持配置文件在SVN下的最佳方式?

良好的触感会以保存配置文件的原始路径。

我做了几台机器,从旧的Solaris 8盒到Mac OS X,和我有一个非常简单的布局:

在我的仓库,我有以下:

<root>/common 
    /.emacs.d 
    /.bash_common 
    /scripts # platform-independent binary tools 

<root>/linux 
    .bashrc 
    .emacs 
    ... 

<root>/solaris 
    .bashrc 
    .emacs 
    ... 

<root>/osx 
    .bashrc 
    .emacs 
    ... 

每的操作系统homedirs有一个svn:外部引用.emacs.d,.bash_common和脚本,所以这些不重复。另外,我在linux和solaris目录中有一个.bash_hostconfig,并配置了特定于主机的路径配置等,因为我在工作上的设置与我在家中的设置非常不同(FC5-8和RHEL3-5,取决于我在哪里)。因此,在这些事情之间,我有一个非常简单的过程用于在新机器上启动和运行:我只需将/ $ platform检出到一个临时目录中,然后用这些文件覆盖$ HOME中的所有内容。我不需要存储原始路径,因为它总是以这种方式相对于$ HOME。

我修改 - 控制我的配置文件,但我用git而不是svn(当你有多台机器时这更容易)。我有一个bash脚本(称为install.sh),也位于存储库下,它将文件复制或符号链接到机器上适当的位置。因此,如果我需要在新机器上设置,我只需做一个仓库的git克隆(相当于一个svn结账),然后运行我的install.sh以在适当的位置设置我的配置文件。有install.sh左右意味着我也存储配置文件的原始路径,正如你所表示的你想要的。

+2

使用这种方法,你能够提交更改并使用`git diff`作为你的配置文件吗?或者您的目标更多只是为了帮助部署? – Tom 2010-03-09 09:00:24

我们使用CVS将配置存储在尽可能平坦的目录结构中。这项技术很容易扩展到SVN。

然后我们有一个Makefile文件设置为使用CVS出口到:

  1. 创建CVS目录结构的副本没有的CVS组件,
  2. 在创建目标机器所需的目录结构的本地目录,就好像你在目标机器上的根目录一样,例如./my_cvs_dir/etc/ ..和./my_cvs_dir/usr/local/newapp/..,
  3. 将文件从CVS结构到目标目录结构复制,
  4. 创建目标目录结构的压缩包,和
  5. 将压缩包部署到目标机器上。

我们也有这些tarball成立于日益专业化的领域, Sol10,Apache,特定应用程序等。

HTH

欢呼声,

罗布

那么你可以存储特定的目录树下所有的配置文件,每个应用程序一个子目录。由于大多数应用程序都应该有一个指令来指定配置路径,因此每个服务器都是唯一需要改变的地方(或者如果你有硬编码的配置文件,也许支持include这样的东西)。

然后可以将此树检入到您喜欢的任何VCS中。

对于部署,您可以编写一个shell脚本或一个初始化所有内容以使用您的配置文件树的东西。

这是我已经实现:

我做所有的configs的rsync的到一个目录(比如/数据/ CONFIGS /主机名/ {等的httpd}服务器

我有。一个每小时运行一次的rsync传输更改,只要rsync完成,就有一个svnautocommit脚本可以自动提交更改。这样,我可以回滚到任何更改或任何我想要的版本。您可能需要根据您的要求规划SVN目录结构。

正如你想要一个中央商店无论如何,你可能会去稍微复杂一些像Slack。您在推送服务器上管理和版本控制文件,然后将其rsync同步到客户端。 explanation of subroles有一些关于如何构建树的例子。