我在一个拥有大型Java代码库(300k +代码行)的团队中工作,最近采用Git作为源代码控制(从ClearCase迁移).我们使用Git Flow作为我们的分支策略.有一些我们经常遇到的用例,我们一直在努力.
我们已将所有功能合并到开发分支中,以便在即将发布的版本中使用.当我们接近发布时,事实证明一个功能无法上线(由于客户端没有准备好,或者其他原因).创建发布分支的最佳方法是什么,但省略了一个特定功能(跨多个提交)?该功能需要包含在下一个版本中.我们之前尝试过的是在所有提交上执行"git revert",创建release分支,然后在恢复的提交上执行"git revert".这是一种非常痛苦的方法,特别是对于大型功能.
我们已经创建了发布分支,但在发布之前,确定需要删除一个功能.与第一个用例类似,此功能需要能够进入以下版本.因此,在提交中执行"git revert"并不能完全解决它,因为当我们执行"git flow release finish"时,恢复将返回合并到develop分支中.
如Git Flow模型中所述,所有提交都是在功能分支上进行的,而不是直接在开发分支上进行.当某个功能完成并准备好下一个版本时,它将被合并以进行开发.在下一个版本的时候,发布分支是由开发创建的.在对发布进行回归测试并在必要时进行修复之后,它将进入生产阶段并合并到master,然后在发生错误修复的情况下重新开发,并标记版本号.当我们认为在下一个版本中出现的功能最终需要被忽略时,上述问题就出现了.
处理这些情况的最佳方法是什么?在这两种情况下,分支机构已经被许多开发人员发布和删除,因此弄乱历史可能会造成困难.我知道这些不太理想,但不幸的是情况已经超出我们的控制范围.
我正在使用Grails,并且我有一个具有多个hasMany属性的域模型到同一个域类,如下所示:
static hasMany = [ posts : Post, likes : Post, dislikes : Post ]
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是,当我在帖子列表中添加内容时,它也会以某种方式将其变成喜欢和不喜欢的列表.至少,当我遍历每个列表时,它就是这样的样子.
我认为问题是我在Post域中也有以下关系:
static belongsTo = [ contributer : Contributer ]
Run Code Online (Sandbox Code Playgroud)
配置这些关系以使我的模型工作的最佳方法是什么?有什么建议?
@Wayne,
我也试过使用你的测试,它成功通过了.所以,我唯一能想到的是我的PostController中的save方法有问题.我已粘贴下面的相关代码(我正在使用Spring Security Core插件,而我的Contributer类扩展了使用该插件创建的User类):
@Secured(['IS_AUTHENTICATED_FULLY'])
def save = {
def props = [title:params.title, post:params.post, category:Category.get(params.category.id)]
def user = Contributer.get(springSecurityService.principal.id)
def postInstance = new Post(props)
postInstance.contributer = user
if (postInstance.save(flush: true)) {
flash.message = "${message(code: 'default.created.message', args: [message(code: 'post.label', default: 'Post'), postInstance.id])}"
redirect(action: "show", id: postInstance.id)
}
else {
render(view: "create", model: [postInstance: postInstance])
} …Run Code Online (Sandbox Code Playgroud)