最近,我们将Db模型(Sequelize)移到了一个单独的存储库中,并使用Github软件包进行发布。
当我们将其移至一个独立的存储库时,我们发现我们需要根据环境(生产/暂存/开发)安装不同的版本
例如:
由于我们希望避免手动进入每个相关服务并更新所需的版本,因此我们希望使用dist标签进行管理。
因为我们要根据环境将package.json
拉包版本分别标记为“ staging”和“ production”,并且我们要发布新版本,例如将1.3标记为“ production”。
很遗憾,GitHub注册表似乎不支持dist-tags
,因此我们正在寻找其他方法。
有什么建议吗?
答案 0 :(得分:0)
如果可能的话(意味着如果没有敏感信息,尤其是对于生产参数而言),则应对三个单独的文件进行版本控制:
然后,该想法将是 not 版本package.json
(将其保留为私有),而生成(其中具有正确的值),是从其中一个文件,具体取决于当前的执行环境。
例如,您可以在每个环境中有单独的分支,并在其中包含正确的文件。
生成脚本将使用以下命令确定签出分支的名称:
branch=$(git rev-parse --symbolic --abbrev-ref HEAD)
这意味着您可以:
package.json.tpl
package.json.dev
,package.json.stg
:由于它们是不同的,因此合并或切换分支时没有合并问题。最后,您将(在.gitattributes
declaration中注册 content filter driver 。
(来自“ Customizing Git - Git Attributes”的图像,来自“ Pro Git book”的图像)
与模板文件(smudge
关联的package.json.tpl
脚本将通过在右侧查看值来(自动在git checkout
上生成实际的package.json
文件version.<branch>
值文件。
生成的实际package.json
文件仍然被.gitignore
忽略。
在“ git smudge/clean filter between branches”中查看完整的示例。