首页 > 解决方案 > Git 和开源/社区项目中程序员之间的协调——它是如何工作的?

问题描述

git新手,请原谅我的无知。

假设我们有一个带有一个开源文件的项目,并且两个独立的程序员决定更改该文件中的内容,这导致两个功能部分冲突,因为每个程序员都修改了文件的某个部分以满足他/她的需要。

我假设他们每个人的下一步是提交拉取请求,并且存储库的所有者必须以某种方式解决冲突。

我不明白的是,在您有大型项目(例如 Linux 内核)的情况下,他们如何在这些独立贡献者之间进行协调?每个分叉项目并试图做出贡献的人都不可避免地会导致混乱,这与由某种或整体架构师领导的协调开发团队的项目不同,他们决定由谁以及何时改变什么。

有人可以解释一下这是如何工作的吗?

标签: git

解决方案


我假设他们每个人的下一步是提交拉取请求,并且存储库的所有者将不得不以某种方式解决冲突

如果所有者对该代码足够熟悉,他可以这样做。否则他可以只接受一个请求并告诉另一个人他应该解决冲突——这就是分布式 VCS 的美妙之处。考虑这个例子:

*        (dev1/feature-A)
| *      (dev2/feature-B)
|/
*        (owner/master)

dev1/feature-A与 冲突dev2/feature-B,因此所有者不能将两个分支合并到他的owner/master. 他决定合并dev1/feature-A

*        (owner/master)
|\
| *      (dev1/feature-A)
|/
| *      (dev2/feature-B)
|/
*

然后他告诉dev2解决冲突。为此,dev2例如将 master 合并到他的分支中:

*        (dev2/feature-B)
|\
* |      (owner/master)
|\ \
| * |    (dev1/feature-A)
|/ /
| *
|/
*

例如,现在所有者可以通过快进合并dev2/feature-B来使用该合并:owner/master

*        (owner/master, dev2/feature-B)
|\
* |
|\ \
| * |    (dev1/feature-A)
|/ /
| *
|/
*

Linus Torvalds 在 Git 上的这个演讲可能会让你感兴趣。


推荐阅读