多开发人员Git工作流程,保持干净的历史记录

时间:2012-03-14 11:06:43

标签: git workflow

桑多夫斯基advocates对你的主要人物the master and develop branch非常严格。 repo的历史,保持干净,不会因为分支和检查点提交而混乱。

  

您永远不应该将私有分支直接合并到具有vanilla合并的公共分支中。首先,使用重置,rebase,squash合并和提交修改等工具清理分支。

     

将公共历史视为不可变的,原子的,易于遵循。将私人历史视为一次性和可塑性。

这对我有吸引力,我正在计划实施一个工作流程,我的同事们每个人都有自己的远程存储库来推送,并在他们完成分支上的工作并清理提交时执行拉取请求历史。随后我('集成管理器')将这些干净的提交合并到一般开发分支中。

我想这种做法意味着受祝福的回购将不会有Pro Git book以外的任何分支。功能分支仅存在于本地存储库中 - 如果需要在分支上进行协作,则可以通过将分支推送到其中一个协作员工的远程存储库来实现。

但是,{{3}}将此描述为" 公共小项目"的工作流程。这是否意味着在我们的案例中使用不同的工作流更好,比如将完成的分支推送到受祝福的仓库而不是个人存储库?

要明确:我不是要添加不必要的复杂性或开销。我的目标是建立一个工作流程,我和我的同事可以异步工作,我可以在他们完成工作时审查他们的工作,并通过评论将其反弹或者将其合并到代码库中(如果一切正常的话)。


修改:显然问的问题不明确,所以我会尝试总结一下:

让我的同事将他们的分支机构直接推送到我们受祝福的存储库(例如,它会以某种方式污染其历史)会不会有缺点吗?

3 个答案:

答案 0 :(得分:1)

我相信 Gitolite "personal" branches可能非常适合您的需求。这就像拥有一个个人区域(a.k.a.命名空间),每个开发人员都可以(甚至强行)推动。相反,master对所有开发人员都是只读的,但只有集成商。

如果Alice的.git/config包含以下配置:

[remote "origin"]
        url = git@server:project
        push = +refs/heads/*:refs/heads/personal/alice/*
        fetch = +refs/heads/master:refs/remotes/origin/master
        fetch = refs/heads/personal/alice/*:refs/remotes/origin/me/*
        fetch = +refs/heads/personal/bob/*:refs/remotes/origin/bob/*

然后爱丽丝会看到

  • 她在服务器上的分支origin/me/branch
  • Bob的分支为origin/bob/branch

这样,Alice可以:

  • 在她的分支上工作并将它们拉/推送到服务器
  • master
  • 开始新分支
  • 从Bob的分支机构开始新的分支
  • 只需按下服务器即可备份她的作品。

Gitolite可以配置为Alice不能写在Bob的个人空间上,反之亦然:

@users = alice bob
@integrators = john
@repos = repo1 repo2

repo @repos
    RW+                         = @integrators
    RW+     personal/USER/      = @users

答案 1 :(得分:0)

我认为没有理由说这个工作流程对你不起作用:对公众的强调可能是因为对于一个公共项目来说,保持一个干净,不可改变的历史更为重要。

答案 2 :(得分:0)

一些不满情绪:

幸运的回购将很快(取决于有多少开发人员和功能)与许多分支混乱。如果只包含例如它,它会更干净掌握和开发,而不是掌握,开发,featureA,featureB,featureC ..等等。但你总是可以通过删除遥控器(git push origin:featureA)来清理它们,但它增加了额外的清理工作。

此外,当人们从受祝福的仓库中取货时,他们的仓库将包含对所有这些分支的远程引用,当您移除远程分支时,他们将必须关闭和继续“git remote prune origin”来清理不是更长的有效期,这也增加了额外的工作。