0

我们的 git 存储库有一个预先测试过的提交结构,类似于这样,一种自动化的集成管理器

但是,我们在删除分支时遇到了问题,因为它们可以从 devs 本地存储库中删除,并且该更改可以由 dev 推送到他们的个人存储库,但该更改不会使其成为“绿色”或“祝福的回购作为构建服务器在删除分支时不会触发构建。

如果我编写一个脚本,该脚本从开发人员个人仓库中获取所有分支,并从“绿色”仓库中获取所有分支(请记住,这将有许多其他开发人员的分支)并发出

git push origin :BranchName

对于存在于“绿色”中但不在个人中的每个分支,这是否会删除开发人员在其个人仓库中删除的分支,但保留所有其他分支?

这行得通吗?还有比这更好的解决方案吗?

4

1 回答 1

0

我不确定您的系统是否能够捕捉到引用的删除以触发构建,但由于 CI 实例是从您的开发远程个人存储库中提取的,您应该使用它git remote prune origin来删除 CI 端已删除的分支个人远程仓库(假设 origin 是开发远程仓库的远程名称,因为它是从那里克隆的)

当您的 CI 推送到绿色存储库时,它能够将远程分支的子集与其当前拥有的分支进行比较,并找到已删除的分支。因此,在 CI 方面,您可以在每次推送时执行类似的操作:

git branch -a | grep {green_repo_remote_name}

将其与本地分支机构列表进行比较:

git branch

并执行

git push {green_repo_remote_name} :branch_name_that_exists_only_in_green_repo

更新:

根据下面的评论,上面的方法似乎将从绿色仓库中删除其他 devs 分支。我的错。在我看来,有两种方法可以解决这个问题:

一、停止在green repo中创建dev分支,使用CI来实际整合变更:

从开发个人仓库更改后,CI 应检查此更改,从绿色仓库拉出一个众所周知的集成分支,将开发分支合并到其中并编译。如果成功,则将更改推回绿色回购

二、将 CI repos 注册为绿色 repo 中的遥控器,在绿色 repo 端使用 post-receive hook 来触发git remote prune *。这将有效地删除从每个遥控器的 CI 存储库中删除的所有分支。

我希望这会有所帮助!

于 2012-10-16T21:05:24.883 回答