git - 在源云存储库之间传输时如何排除某些文件?
问题描述
目前我有两个谷歌云项目,一个用于暂存环境,另一个用于生产环境。他们每个人都有一个源云存储库。每当我完成开发时,我会将代码合并到暂存环境中 repo 的 master 分支,然后启动一个云构建触发器,将所有代码从暂存环境中的 repo 复制到 repo生产环境。
有一些配置文件和凭证文件在不同的环境中应该是不同的,所以我不想复制它们,否则它会覆盖生产 repo 中的环境相关文件。这是我的尝试cloudbuild.yaml
:
steps:
- name: gcr.io/cloud-builders/git
args: ['checkout', '--orphan', 'temp']
- name: gcr.io/cloud-builders/git
args: ['add', '-u']
- name: gcr.io/cloud-builders/git
entrypoint: "bash"
args:
- '-c'
- |
- git reset `cat .gitcopyignore`
- name: gcr.io/cloud-builders/git
args: ['config', '--global', 'user.name', '<name>']
- name: gcr.io/cloud-builders/git
args: ['config', '--global', 'user.email', '<email>']
- name: gcr.io/cloud-builders/git
args: ['commit', '-am', 'latest production commit']
- name: gcr.io/cloud-builders/git
args: ['branch', '-D', 'master']
- name: gcr.io/cloud-builders/git
args: ['branch', '-m', 'master']
- name: gcr.io/cloud-builders/git
args: ['push', '-f', 'https://source.developers.google.com/p/<production project>/r/<production repo>', 'master']
我将所有与环境相关的文件放入.gitcopyignore
文件中并git reset
在它们之后运行git add
以排除它们被复制到新的存储库中。但是,每次执行此触发器时,都表示所有步骤都已成功执行,但生产环境中的环境相关文件仍然被覆盖。
我不想将这些文件添加到其中.gitignore
,因为我确实想在暂存环境的存储库中保留版本控制,以防我的队友想要修改它们。更重要的是,这些环境相关文件必须在 repos 中,因为 google cloud 需要从源云 repo 中拉取所有代码,然后才能部署云功能。
谁能告诉我什么可以解决我的问题cloudbuild.yaml
?它已经困扰我好几天了。
谢谢!
解决方案
通常,尝试维护两个独立的存储库可能是一堆不必要的工作,并且还可能导致您的存储库不必要地出现分歧。
保持配置不同的推荐方法是将模板存储在存储库中并将其复制到位,使用脚本对其进行修改,或者存储多个配置文件并复制正确的一个,手动或使用运行的脚本根据环境不同。目标文件(实际使用的版本)应该放在 中.gitignore
,因为您不想直接签入它们。我很确定大多数平台都可以处理这种方法,因为它很常见并且是最佳实践。
这意味着您将拥有一个包含所有文件和类似历史记录的存储库。您无需担心事情会意外分歧。
推荐阅读
- php - 将两个不同的数组数据合并到一个数组php中
- javascript - 如何从给定的数字数组中找到最大数字?
- angular - Angular:如何将数据从按钮发送到服务?
- python-3.x - 将二进制字符串转换为二进制
- angular - 在 Angular 中维护同一组件的多个状态
- c# - C# Swagger 生成具有域身份验证的客户端
- python - 如何杀死另一个脚本运行的脚本
- java - git log --follow 包括错误的提交
- python - SQLite/Python 变量名和列名相同的问题
- r - 这是对数据框进行排序以在 ANOVA (aov) 中获得合理结果的正确方法吗?