【发布时间】:2018-02-18 10:18:54
【问题描述】:
我有一个有点复杂的 ansible 工作流程。我有两个气隙网络。我在两个网络上都开发了剧本,所以我有两个由 git 管理的有点独立的 ansible 存储库。同时,大部分剧本都可以在这两个地方使用。更复杂的是,这是一种单向转移。我可以从网络 A 转移到 B,但不能从 B 转移到 A。
我有模板文件,其中包含与一个网络相关但与另一个网络无关的信息。我已经设计了它,以便文件名应该相同(以及 Jinja2 模板中的变量名)。我希望能够创建一个排除文件的 git 包,这样当我从另一个网络存储库上的包中提取时,文件不会被覆盖。因为在模板文件中包含错误信息可能会破坏整个环境,所以我需要在 Git 中跟踪 Jinja2 模板/变量文件。
除了使用 .gitignore(因为需要跟踪文件以便我可以在紧急情况下回滚)之外,是否有人有工作流建议或 git 命令可以帮助我完成此任务?
【问题讨论】:
-
好的,作为后续,由于我无法跟踪此存储库结构中的配置数据,有没有办法可以使用 .gitignore 文件来排除特定目录(或多个目录)主存储库,然后一些如何创建文件树中存在的第二个 git 存储库来跟踪实际配置数据?我不抱太大希望,因为这是一个非常混乱和复杂的情况,我在过去 20 年中学到的关于系统管理的一切都尖叫着不要这样做......但如果我必须这样做,我可以吗?
-
你可以使用 Git 子模块来做到这一点。不过,我不喜欢子模块;如果可能的话,我会避开它们。子模块本质上是一个单独的 Git 存储库,在父(“超级项目”)存储库中,您记录应该从另一个存储库使用哪个特定的 commit。这只是将子模块的原始哈希 ID 保存在 Git 称为“超级项目”的纯文本文件中的一种更加自动化的形式。因此,您可以(通过 bundle 或其他方式)传输超级项目数据,而无需打扰其他 Git 存储库。
-
我当然同意你对使用这样的东西的犹豫。我只想制定某种备份计划,以防我找不到其他合理的解决方案来跟踪更改。我确实喜欢配置脚本的想法。我正在考虑在 repo 中有一个单独的分支来跟踪这些事情,然后我可以确保脚本仅在文件系统树中作为积极行动的结果。安全性好!非常感谢您的建议和帮助!
标签: git ansible git-bundle