在添加自定义github操作时保持git fork同步

rqqzpn5f  于 2023-08-01  发布在  Git
关注(0)|答案(1)|浏览(123)

简而言之:我想派生一个仓库,保持它与原始仓库同步,但也要添加一些GitHub操作到派生中。
我想把一个git仓库,在一个公共的gitlab示例上,派生到一个在我们的github企业示例上托管的克隆。

  • 分叉应该与原始保持同步:至少main和dev分支应该始终与原始存储库保持最新。我找到了一些github操作来启用此功能,例如wei/git-sync
  • 对上游存储库的贡献将由我的团队在分叉上开发和测试,然后再贡献给上游。

现在,我还想通过github操作向分叉的存储库添加一个CI/CD管道。

  • 据我所知,github操作需要成为运行它们的每个分支的一部分。
  • 所有的CI操作都应该在dev和main分支上运行,以及在我们从这些分支创建的任何特性分支上运行。
  • 当我们回馈的时候,吉突布的行动不应该是我们回馈的一部分。无论如何,它们都不会在gitlab示例上工作。

我如何协调这些需求?

  • 如何在克隆的仓库的分支上运行这些github操作,同时保持这些分支与上游仓库同步?
  • 我如何保持我们的贡献干净,只包含我们对原始代码的更改,而不包含我们的自定义github操作?

是否有一种方法可以在每个分支和每个提交上执行github操作,但不成为分支本身的一部分?或者,是否有一些巧妙的合并/重定基技巧组合,可以自动包括github操作,但不会导致提交历史的完全混乱?
解决这类问题的最佳实践是什么?这通常是如何解决的?

flseospp

flseospp1#

问题是:GitLab中maindev分支应该在你的GitHub fork中被精确镜像。不应在此处添加任何类型的文件。特别是,main中不应有.github/workflow/xxx.yml操作。
镜像GitLab的maindev的GitHub分支应该受到保护,不应该直接向它们推送任何内容。
那就是说... GitHub分支(镜像GitLab的分支)不应该被称为maindev,而是,例如,gitlab-main-mirrorgitlab-dev-mirror
这样,您就可以使用main来执行GitHub操作。
因此,您需要:

  • gitlab-main-mirror:这个分支是GitLab仓库的main分支的精确镜像。
  • gitlab-dev-mirror:这个分支是GitLab仓库的dev分支的精确镜像。
  • main:此分支基于gitlab-main-mirror,但它也包含您的GitHub Actions文件。
  • dev:此分支基于gitlab-dev-mirror,但它也包含您的GitHub Actions文件。

通过这种设置,maindev是您的团队工作的分支。sync-with-upstream.yml工作流配置为使gitlab-main-mirrorgitlab-dev-mirror与GitLab存储库保持同步。
当你想用GitLab的最新更改更新maindev时,你可以从相应的gitlab-*分支进行合并。如果需要,可以使用另一个GitHub Actions工作流自动执行。
这种方法允许您拥有精确的镜像分支(gitlab-main-mirrorgitlab-dev-mirror),同时仍然拥有包含GitHub Actions文件的工作分支(maindev)。您的团队需要记住在开始新工作或将贡献返回到GitLab存储库之前从gitlab-*分支中提取更改。
当贡献回GitLab时,您将从gitlab-main-mirrorgitlab-dev-mirror开始,选择或应用您想要贡献的更改,然后从那里推送或创建合并请求。这可以确保贡献中不包含任何GitHub Actions文件。
同步可以定期进行:

name: Sync with Upstream

on:
  schedule:
    - cron: '0 0 * * *'  # Run daily at 00:00

jobs:
  sync-main:

    runs-on: ubuntu-latest

    steps:
    - name: Checkout git repo
      uses: actions/checkout@v3
      with:
        ref: 'gitlab-main-mirror' # specify the branch to checkout

    - name: Pull upstream changes to main mirror
      uses: wei/git-sync@v3
      with:
        destination_repo: ${{ github.repository }}
        source_repo: '<original-gitlab-repo-url>'
        source_branch: 'main'
        destination_branch: 'gitlab-main-mirror'
        github_token: ${{ secrets.GITHUB_TOKEN }}

  sync-dev:

    needs: sync-main  # Ensures the main sync is done before dev starts

    runs-on: ubuntu-latest

    steps:
    - name: Checkout git repo
      uses: actions/checkout@v3
      with:
        ref: 'gitlab-dev-mirror' # specify the branch to checkout

    - name: Pull upstream changes to dev mirror
      uses: wei/git-sync@v3
      with:
        destination_repo: ${{ github.repository }}
        source_repo: '<original-gitlab-repo-url>'
        source_branch: 'dev'
        destination_branch: 'gitlab-dev-mirror'
        github_token: ${{ secrets.GITHUB_TOKEN }}

字符串

相关问题