简而言之:我想派生一个仓库,保持它与原始仓库同步,但也要添加一些GitHub操作到派生中。
我想把一个git仓库,在一个公共的gitlab示例上,派生到一个在我们的github企业示例上托管的克隆。
- 分叉应该与原始保持同步:至少main和dev分支应该始终与原始存储库保持最新。我找到了一些github操作来启用此功能,例如
wei/git-sync
- 对上游存储库的贡献将由我的团队在分叉上开发和测试,然后再贡献给上游。
现在,我还想通过github操作向分叉的存储库添加一个CI/CD管道。
- 据我所知,github操作需要成为运行它们的每个分支的一部分。
- 所有的CI操作都应该在dev和main分支上运行,以及在我们从这些分支创建的任何特性分支上运行。
- 当我们回馈的时候,吉突布的行动不应该是我们回馈的一部分。无论如何,它们都不会在gitlab示例上工作。
我如何协调这些需求?
- 如何在克隆的仓库的分支上运行这些github操作,同时保持这些分支与上游仓库同步?
- 我如何保持我们的贡献干净,只包含我们对原始代码的更改,而不包含我们的自定义github操作?
是否有一种方法可以在每个分支和每个提交上执行github操作,但不成为分支本身的一部分?或者,是否有一些巧妙的合并/重定基技巧组合,可以自动包括github操作,但不会导致提交历史的完全混乱?
解决这类问题的最佳实践是什么?这通常是如何解决的?
1条答案
按热度按时间flseospp1#
问题是:GitLab中
main
和dev
分支应该在你的GitHub fork中被精确镜像。不应在此处添加任何类型的文件。特别是,main
中不应有.github/workflow/xxx.yml
操作。镜像GitLab的
main
和dev
的GitHub分支应该受到保护,不应该直接向它们推送任何内容。那就是说... GitHub分支(镜像GitLab的分支)不应该被称为
main
或dev
,而是,例如,gitlab-main-mirror
和gitlab-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文件。通过这种设置,
main
和dev
是您的团队工作的分支。sync-with-upstream.yml
工作流配置为使gitlab-main-mirror
和gitlab-dev-mirror
与GitLab存储库保持同步。当你想用GitLab的最新更改更新
main
或dev
时,你可以从相应的gitlab-*
分支进行合并。如果需要,可以使用另一个GitHub Actions工作流自动执行。这种方法允许您拥有精确的镜像分支(
gitlab-main-mirror
和gitlab-dev-mirror
),同时仍然拥有包含GitHub Actions文件的工作分支(main
和dev
)。您的团队需要记住在开始新工作或将贡献返回到GitLab存储库之前从gitlab-*
分支中提取更改。当贡献回GitLab时,您将从
gitlab-main-mirror
或gitlab-dev-mirror
开始,选择或应用您想要贡献的更改,然后从那里推送或创建合并请求。这可以确保贡献中不包含任何GitHub Actions文件。同步可以定期进行:
字符串