git - Git 和开源/社区项目中程序员之间的协调——它是如何工作的?
问题描述
git新手,请原谅我的无知。
假设我们有一个带有一个开源文件的项目,并且两个独立的程序员决定更改该文件中的内容,这导致两个功能部分冲突,因为每个程序员都修改了文件的某个部分以满足他/她的需要。
我假设他们每个人的下一步是提交拉取请求,并且存储库的所有者必须以某种方式解决冲突。
我不明白的是,在您有大型项目(例如 Linux 内核)的情况下,他们如何在这些独立贡献者之间进行协调?每个分叉项目并试图做出贡献的人都不可避免地会导致混乱,这与由某种或整体架构师领导的协调开发团队的项目不同,他们决定由谁以及何时改变什么。
有人可以解释一下这是如何工作的吗?
解决方案
我假设他们每个人的下一步是提交拉取请求,并且存储库的所有者将不得不以某种方式解决冲突
如果所有者对该代码足够熟悉,他可以这样做。否则他可以只接受一个请求并告诉另一个人他应该解决冲突——这就是分布式 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 上的这个演讲可能会让你感兴趣。
推荐阅读
- visual-studio-code - 使用 **watch** 在 VSCode 中调试独立的 Blazor WebAssembly 应用程序
- python - 使用理解遍历字典以将所有日期时间值转换为 MM/DD/YYYY 字符串
- python-3.x - Pandas DataFrame to_dict 和 from_dict 会丢失列顺序吗?
- java - 更新操作但没有更新行时的 HttpStatus 代码
- google-cloud-platform - 我的 GCP 项目仪表板中的未知项目
- javascript - 使用javascript变量html将链接放入href
- r - 我可以复制输出结果并在 R/Shiny 函数中使用它吗?
- node.js - 如何使在 TypeScript 中使用 Sequelize 的方法的参数类型安全
- azure - 上传草图'GetStarted.ino':退出代码=3
- twitter-bootstrap - Bootstrap 卡片中的垂直对齐文本