每个开发者都创建一个分支,这样做有意义吗?

26

我之前只在个人项目中使用Git。现在我想和另外两位开发者一起继续开发一个项目。

如果其中一名开发者想提交更改,但是另一名开发者已经有了一个提交记录,这会引起问题吗?因此,为我们每个人创建一个分支是否有意义呢?


6
除非你们都在同一台机器上工作,否则每个人都有自己的分支。当你克隆你的仓库时,你会得到自己的一组分支,这些分支恰好与其他人的分支同名,但它们仍然是你自己的分支 - user229044
2
@meagar 听起来很有趣,你能详细说明一下吗? - danijar
2
每个克隆的仓库实例都是一个完全独立的东西。你可以自由地对你的分支做任何想做的事情,在你尝试推送之前,你不会影响到任何其他人的工作。当你推送和拉取时,你正在执行将本地分支与设置为“跟踪”分支的远程分支(或反之亦然)合并的操作。这与在本地机器上合并任何两个分支完全相同;实际上,git pull只是一个获取操作,后面跟着一个合并操作。为了简单起见,git push限制合并为快进式合并,因为你无法有效地解决远程冲突。 - user229044
4
重点是,无论你们每个人是否在“master”或其他分支上工作,都是你的分支。通过推送和拉取,你们将独立的主分支合并到彼此之间,这与合并本地分支没有区别。为每个用户创建新名称的分支的想法与Git相抵触;Git已经为每个克隆创建了单独的分支,这对于Git的工作方式绝对是基本的。 - user229044
@meagar 非常感谢,让它变得更清晰了! - danijar
2个回答

44

Git和大多数版本控制系统一样,非常适合多个开发人员使用。事实上,这是版本控制系统的主要用途之一。

无需为每个用户创建分支,甚至可以说这样做会适得其反。如果您正在开发相同的功能,您可能希望获取彼此的更改,进行拉取和合并。为每个用户创建分支是冗余的,并且会不必要地使事情变得复杂。

您描述的提交情况并不成问题。如果另一个用户在与您相同的分支上创建了新的提交,则在尝试推送时会停止您。相反,您需要先拉取其他用户的提交,然后将自己的工作与这些更改合并(或重新设置基础)。这是 git pull 的标准行为。

通常做法是基于功能创建分支。如果您想获得有关分支的指导,请参考这个流行的策略


这取决于你的工作如何分配。在我工作的地方,我们从不会让两个人同时编写同一个功能。但是,如果您确实有多个开发人员在同一个功能上工作,我完全同意您的观点。 - Geeky Guy
3
你仍然不应该只为每个人创建单独的分支;它应该是驱动分支创建的功能。每个人应该有与他们正在积极开发的功能一样多的分支。 - user229044
5
我认为这个答案是错误的。你不应该在同一个分支上有两个开发者。如果有人压缩了一些提交并强行推送,会怎样呢? 如果这个功能需要两个开发者,你应该确切地确定每个开发者正在处理的范围,并为每个特性创建一个分支。然后你可以从主分支(或里程碑等)创建一个额外的分支,将这些特性分支合并进去。这将允许解决合并冲突和正确测试集成分支,然后再合并到主分支并通过部署流程。 - Heath N
如果有人压缩了一堆提交并强制推送,那该怎么办呢?嗯,这就是为什么“强制推送”通常是一个不好的选择(除非有充分的理由使用它)。 - ludovico
还值得一提的是:1)大多数代码仓库平台都允许设置分支权限,以防止你提到的问题(例如Github上的受保护分支,Bitbucket上的分支权限);2)仅有分支并不能自动解决该问题,除非你配置了相应的权限(例如,“如果有人强制推送到‘你的’分支会怎样”)。 - ludovico

8
我们曾在我工作的地方这样做。我们每个人至少有一个个人分支——我实际上为我要完成的每个任务都创建了一个分支。
当我们完成后,我们会对主分支进行拉取请求。如果有人将与您的更改冲突的代码合并到主分支中,则必须像使用任何其他源控制平台(例如Tortoise、Mercurial等)一样进行冲突解决,但如果您的开发人员知道自己在做什么,这不是什么大问题。
我认为这是团队开发的最佳方式。您始终可以在自己的个人环境中进行测试,并根据需要快速从每个分支切换代码。拉取请求系统还使同行审查变得更加简单,因为每个人都可以协作并直接在github差异页面上编写相关行的注释。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接