首页 > 解决方案 > 在源云存储库之间传输时如何排除某些文件?

问题描述

目前我有两个谷歌云项目,一个用于暂存环境,另一个用于生产环境。他们每个人都有一个源云存储库。每当我完成开发时,我会将代码合并到暂存环境中 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?它已经困扰我好几天了。

谢谢!

标签: gitgoogle-cloud-platformversion-controlignore

解决方案


通常,尝试维护两个独立的存储库可能是一堆不必要的工作,并且还可能导致您的存储库不必要地出现分歧。

保持配置不同的推荐方法是将模板存储在存储库中并将其复制到位,使用脚本对其进行修改,或者存储多个配置文件并复制正确的一个,手动或使用运行的脚本根据环境不同。目标文件(实际使用的版本)应该放在 中.gitignore,因为您不想直接签入它们。我很确定大多数平台都可以处理这种方法,因为它很常见并且是最佳实践。

这意味着您将拥有一个包含所有文件和类似历史记录的存储库。您无需担心事情会意外分歧。


推荐阅读