如何在git中传播分支删除?

如何在git中传播分支删除?,git,branch,Git,Branch,我们为我们的git存储库提供了一个预先测试过的提交结构,这是一种自动提交 然而,我们在删除分支时遇到了一个问题,因为它们可以从devs本地repo中删除,并且开发人员可以将更改推送到他们的个人存储库中,但是该更改不会使其成为“绿色”或“祝福”repo,因为在删除分支时构建服务器不会触发构建 如果我编写一个脚本,从devs个人回购中获取所有分支,并从“绿色”回购中获取所有分支(请记住,这将有许多其他dev的分支),然后发布一个 git推送原点:BranchName 对于“绿色”中存在的非个人分支,

我们为我们的git存储库提供了一个预先测试过的提交结构,这是一种自动提交

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

如果我编写一个脚本,从devs个人回购中获取所有分支,并从“绿色”回购中获取所有分支(请记住,这将有许多其他dev的分支),然后发布一个

git推送原点:BranchName

对于“绿色”中存在的非个人分支,这是否会删除开发人员在其个人回购中删除的分支,但保留所有其他分支


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

我不确定您的系统是否能够捕获到删除引用以触发生成,但是,由于CI实例是从您的dev remote personal repo中提取的,您应该使用
git remote prune origin
删除CI端上从personal remote repo中删除的分支(假设origin是dev remote repo的远程名称,因为它是从那里克隆的)

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

git branch -a | grep {green_repo_remote_name}
将其与本地分支机构列表进行比较:

git branch
执行

git push{green\u repo\u remote\u name}:存在的分支\u name\u仅\u在\u green\u repo中\u

更新:

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

I.停止在绿色回购中创建开发分支,使用CI实际集成更改:

从dev personal repo更改后,CI应检查此更改,从green repo中提取一个众所周知的集成分支,将dev分支合并到其中并编译。如果成功,则将更改推回绿色回购

二,。在绿色repo中将CI repo注册为remotes,在绿色repo端使用post receive钩子触发
git remote prune*
。这将有效地删除从每个远程服务器的CI repo中删除的所有分支


我希望这有帮助

嗯。。在重新阅读[git push手册页]之后,这个命令似乎不起作用,只会删除远程中的许多分支。谢谢Eugene。有许多开发人员在他们自己的个人回购中拥有自己的分支,因此绿色可能包含许多以绿色存在的分支,这些分支不在当前本地回购中(这是一个开发人员个人回购的克隆)。这种方法是否不会删除当前开发人员个人回购协议中未包含的所有绿色分支,即可能删除属于其他开发人员的所有分支?请参阅更新。我对你的设置感到有点困惑,所以我忽略了一个事实,即你可以将来自不同开发人员的一组开发分支保持为绿色,你的问题解决了吗?如果是这样的话,如果你能接受答案,如果它有助于或提供你自己的答案,那么其他人可以从知识中受益,那就太好了