我希望拥有一个受祝福的存储库和几个组或开发人员存储库。
开发人员应从克隆的存储库上的受祝福的存储库工作中克隆并提交他们的更改。每当他们觉得他们的工作已经完成时,他们就应该将他们的更改推送到他们的公共存储库。然后,主要开发人员应从公共开发人员存储库中提取更改 - 执行他想要做的任何事情(签名,修改等),然后将其推送到受祝福的存储库。
在任何代码审查计数代码可能被拒绝的环境中。假设开发人员A和B同时处理某个功能。两位开发人员都完成了他们的工作并将补丁推送到他们的公共存当开发者B的补丁被拒绝时,开发者A的补丁被接受。然后,首席开发人员将开发人员A的更改推送到祝福的存储库。开发人员B修复补丁并将其工作重新放在受祝福的存储库之上(分别是开发人员A接受的更改)。如果开发人员B现在将他的工作推送到他的公共存储库,他将收到错误信息 存储库具有不兼容的历史记录。
我能解决的唯一方法是删除公共存储库并重新创建存储库。有没有更清洁的方法来解决这个问题?
答案 0 :(得分:2)
考虑到公共回购只为客户提供集成经理,B可以安全地强行推动他的工作:
git push --force
集成管理器尚未接受任何B的提交,因此B可以重写其提交的历史记录并再次推送它们。
是否有人会从B的公共回购中克隆/拉出,然后push --force
将不被视为可接受的解决方案。
OP Alex在评论中添加:
所以我做对了吗?如果有人从B拉出来,工作流程就会被打破,因为受祝福的回购不是B的严格有序子集?
我回答说:
如果有人从B的公共回购中撤出,那么该历史就会公开(这不是你的情况,因为只有集成管理器才会撤消,甚至不保留B的提交)。
你不应该改变公共历史。请参阅Pro-Git书籍“ the peril of rebasing ”部分
所以,如果我有一个修补程序推送到受祝福的回购邮件,我会从我的公共回购中删除所有东西,尽可能接近受祝福的回复?或者,如何领导樱桃挑选修补程序?
如果您的公共存储库中还有其他尚未被接受的内容,您可以在专用的“hot_fix
”分支中发布您的修补程序(B首先在祝福的回购中重新定位,然后推送给B的公共回购),由集成经理监控。
无论如何,重点是:集成管理器总是期望在他现有的提交集合之上提交新提交,新历史,而不是冲突的历史记录(因为缺少来自B的rebase)。
无论分支的来源如何,任何冲突的历史都应该被拒绝。
小心挑选樱桃,可能会导致麻烦。参见:
答案 1 :(得分:1)
您可以使用push -f
强制更新遥控器,随意更改公共存储库中的历史记录。由于个别开发人员是唯一应该更改自己的公共存储库的人,因此这通常是安全的事情。