桑多夫斯基advocates对你的主要人物the master and develop branch非常严格。 repo的历史,保持干净,不会因为分支和检查点提交而混乱。
您永远不应该将私有分支直接合并到具有vanilla合并的公共分支中。首先,使用重置,rebase,squash合并和提交修改等工具清理分支。
将公共历史视为不可变的,原子的,易于遵循。将私人历史视为一次性和可塑性。
这对我有吸引力,我正在计划实施一个工作流程,我的同事们每个人都有自己的远程存储库来推送,并在他们完成分支上的工作并清理提交时执行拉取请求历史。随后我('集成管理器')将这些干净的提交合并到一般开发分支中。
我想这种做法意味着受祝福的回购将不会有Pro Git book以外的任何分支。功能分支仅存在于本地存储库中 - 如果需要在分支上进行协作,则可以通过将分支推送到其中一个协作员工的远程存储库来实现。
但是,{{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
和origin/bob/branch
。这样,Alice可以:
master
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”来清理不是更长的有效期,这也增加了额外的工作。