Kar*_*iem 17 linux configuration svn git
我们已将大量源代码迁移到 git,并对我们当前的解决方案感到非常满意。我们希望在同一系统上对我们的服务器配置文件进行版本控制,但有一些事情无法按照我们希望的方式工作,我希望有人可以在这里分享他的经验。
这个问题类似于对服务器配置文件使用修订控制?,但我们有一些特殊要求,不适用于有关该问题的建议。
当前设置对配置文件使用 subversion。相应的存储库看起来像这样
/ # 仓库根目录 +--www.domain.com/ # www 的配置 | \ - 等等/ | \--apache2/ +--dev.domain.com/ # dev 的配置 | +--等/ | \ - 选择/ | \--app1/ | \--conf/ # 在 dev 上配置 app1 \--staging.domain.com/ # 暂存配置
使用 subversion 这将工作得很好,因为可以只检出存储库的子目录。此外,您可以使用 svn:externals 来指向几种不同配置设置的一种通用结构。我们只需要处理所有版本化目录中的.svn文件。另一方面, Git没有 svn:externals并且稀疏检出总是要求从根到实际目录的路径相同。
在讨论迁移到 git 时,我尝试写下服务器配置版本控制的主要要求:
有没有一种很好的方法可以将所有配置都放在一个存储库中并且只有一个子路径作为工作副本?目前我正在考虑两种方法,但想先在这里问这个问题
在单台机器上使用 git 进行配置文件管理工作正常,但我相信一定有人按照我们想要的方式使用它。
谢谢
Kariem
Han*_*an5 15
我以前用过这样的东西;这就是它的工作方式。
/etc/resolv.conf. 这些将是您现在保存在“svn:externals”存储库中的文件。git pull每天自动执行 repo。在单个机器分支中更改代码很简单;只是git checkout在您的开发环境中的适当分支,进行更改,并将它们提交回中央存储库。该分支中的所有机器将在下次运行 cron 作业时自动获取更改。
更改模块分支的代码只是稍微有点棘手,因为它涉及两个步骤:
git checkout 相应的模块分支git checkout每个使用该模块分支的机器分支,然后将模块分支合并到其中。git 会发现您之前已经合并了该模块分支,并且只会注意到自上一个共同父级以来发生的更改。这种方法既有优点也有缺点。一个好处是我可以对模块分支进行更改并将其应用于需要它的机器分支,这让机器分支在准备好之前不会留在旧版本中。那么,缺点是您必须记住将模块分支合并到可能正在使用它的每个机器分支中。我使用一个遍历提交树并自动为我进行合并的脚本,但仍然很痛苦。
作为替代方案,较新版本的 git 支持称为“子模块”的东西:
子模块允许将外部存储库嵌入源树的专用子目录中,始终指向特定的提交。
这将允许您构建有点像“svn:externals”树的东西,然后您可以像现在一样以几乎相同的方式对其进行更新。
| 归档时间: |
|
| 查看次数: |
13780 次 |
| 最近记录: |