保持配置文件在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
左右意味着我也存储配置文件的原始路径,正如你所表示的你想要的。
我们使用CVS将配置存储在尽可能平坦的目录结构中。这项技术很容易扩展到SVN。
然后我们有一个Makefile文件设置为使用CVS出口到:
- 创建CVS目录结构的副本没有的CVS组件,
- 在创建目标机器所需的目录结构的本地目录,就好像你在目标机器上的根目录一样,例如./my_cvs_dir/etc/ ..和./my_cvs_dir/usr/local/newapp/..,
- 将文件从CVS结构到目标目录结构复制,
- 创建目标目录结构的压缩包,和
- 将压缩包部署到目标机器上。
我们也有这些tarball成立于日益专业化的领域, Sol10,Apache,特定应用程序等。
HTH
欢呼声,
罗布
那么你可以存储特定的目录树下所有的配置文件,每个应用程序一个子目录。由于大多数应用程序都应该有一个指令来指定配置路径,因此每个服务器都是唯一需要改变的地方(或者如果你有硬编码的配置文件,也许支持include这样的东西)。
然后可以将此树检入到您喜欢的任何VCS中。
对于部署,您可以编写一个shell脚本或一个初始化所有内容以使用您的配置文件树的东西。
这是我已经实现:
我做所有的configs的rsync的到一个目录(比如/数据/ CONFIGS /主机名/ {等的httpd}服务器
我有。一个每小时运行一次的rsync传输更改,只要rsync完成,就有一个svnautocommit脚本可以自动提交更改。这样,我可以回滚到任何更改或任何我想要的版本。您可能需要根据您的要求规划SVN目录结构。
正如你想要一个中央商店无论如何,你可能会去稍微复杂一些像Slack。您在推送服务器上管理和版本控制文件,然后将其rsync同步到客户端。 explanation of subroles有一些关于如何构建树的例子。
使用这种方法,你能够提交更改并使用`git diff`作为你的配置文件吗?或者您的目标更多只是为了帮助部署? – Tom 2010-03-09 09:00:24