所以请原谅我的无知。
假设我们有一个具有一个开放源代码文件的项目,两个独立的程序员决定改变该文件中的内容,这就产生了两个部分冲突的特性,因为每个程序员都修改了文件的某个部分以满足他/她的需要。
我假设它们的下一步是提交一个pull请求,存储库的所有者将不得不以某种方式解决冲突。
我不明白的是,在有大型项目(例如Linux内核)的情况下,如何在这些独立的贡献者之间进行协调?每个人分叉项目并试图做出贡献,都不可避免地导致混乱,不像在项目中,项目有协调的开发人员团队,由某种类型或整体架构师领导,他们决定由谁和什么时候改变什么。
有人能解释一下这是怎么回事吗?
发布于 2018-10-13 12:44:28
我假设它们的下一步是提交一个拉请求,存储库的所有者将不得不以某种方式解决冲突。
如果所有者对该代码足够熟悉,他可以这么做。否则,他就可以接受其中一个请求,并告诉另一个人,他应该修复冲突--这就是分布式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上的讲话对你来说可能很有趣。
发布于 2018-10-13 12:51:16
你说的有道理。代码的冲突部分称为合并,它通常会自动发生,除非两个开发人员在文件中编辑相同的代码行。如果发生这种情况,就会有人手动选择使用哪段代码。
在大型项目中:主要的区别(至少在我工作的地方)是在单个开发人员和主开发人员之间保留一个开发分支。在其他工作中,没有代码使它直接掌握,它总是先通过开发分支。基本上是在项目结构中添加一个层。项目所有者/架构师是唯一能够将代码转换为主程序的人。
Master <--(Permission restricted)-- Development Branch <-- Individual developers在较大的项目上,您可以有多个开发分支来分离开发团队,并根据需要为此设计添加层。如果你要画一个大项目,这看起来就像一棵大树。
希望这有助于澄清!
发布于 2018-10-13 14:32:05
“不可避免”?你在招惹麻烦。大多数合并冲突都很容易解决,两个人为相同的新标志位添加了不同的含义,因此您可以修复一个使用不同的位,类似于这些代码的内容。
对于两个人来说,对某些源提出完全不兼容的更改是非常罕见的,在这种情况下,有什么比Git更好的工具可以让每个人都能同时进行并讨论可能的解决方案呢?Sam说,让我们这样做,Kim这样说,这就是协作解决问题的方式。
https://stackoverflow.com/questions/52792442
复制相似问题