跳过正文
Background Image
  1. Posts/

如果你是项目成员,是 Fork 原始仓库还是直接原始仓库中修改代码?

·1017 字·3 分钟· ·
沈显鹏
作者
沈显鹏
目录

想必你也见到过很多开源项目中的 CONTRIBUTION.md 文档中通常都会让贡献者 Fork 仓库,然后做修改。

那么如果你是该开源项目中的成员是否需要 Fork 仓库进行修改呢?

以前我没有认真去想过这个问题,对于项目成员感觉 Fork 或不 Fork 好像差不多,但仔细想想 Fork 仓库与不 Fork 仓库其实是有以下几个主要的差别的:

修改权限
#

在原始仓库中,你可能没有直接修改代码的权限,当你 Fork 一个仓库时,会创建一个属于你自己的副本,你可以在这个副本中拥有完全的修改权限,你可以自由地进行更改、添加新功能、解决bug等,而不会对原始仓库产生直接影响。

做实验性的工作
#

如果你计划进行较大的修改或实验性工作,并且不希望直接影响原始仓库,那么 fork 仓库并在 fork 的中进行修改更为合适。

比如你需要实验性的去大量清理现有仓库里的一些垃圾文件或是代码,如果你需要需要多次尝试,并将多次修改直接 git push 到推送原始仓库进行保存或是测试,这大大增加原始仓库的存储空间,如果你的修改是大型文件,那么对原始仓库的存储空间影响则会更大;如果你是 Fork 仓库则不会造成原始仓库的影响,直到你完成修改通过 Pull Request 合并到原始仓库时才会产生新的存储空间。

代码审查和协作
#

当你 Fork 一个仓库并在自己的副本中进行修改后,你必须通过 Pull Request(PR)向原始仓库合并修改,有助于确保代码质量和功能正确性。(当然不 Fork 也可以这样做或不做,但 Fork 了就必须这样做了)

版本控制和历史记录
#

Fork 一个仓库后,你可以在自己的副本中维护独立的版本控制历史。你可以跟踪自己的更改、回溯历史、管理代码版本,而不会影响到原始仓库的版本控制。同时,你可以从原始仓库同步最新的更改,保持你的副本与原始仓库的同步。

总结
#

Fork 仓库与不 Fork 仓库的主要差别在于修改权限、做实验性的工作、代码审查和协作,以及版本控制和历史记录。

个人认为只要一个仓库的贡献者超过 3 人,都建议所有人都 Fork 原始仓库,通过 Pull Request 方式合并代码。

但也有例外情况可能不适合 Fork:项目在 Fork 之后 CI/CD 无法独立工作,但是你需要它们。比如 Fork 后的仓库因为环境等原因不支持独立的运行 CI/CD 而你需要在提交 Pull Request 之前通过自动化对分支进行测试。

另外还要为原始仓库需要做适当的分支权限设置,以防止就算两个人的团队另外一个人不熟悉 Git 使用了非常危险的操作,比如强制推送(Force Push),变基(Rebasing),强制检出(Force Checkout)可能导致代码丢失、数据损坏或版本控制问题。


转载本站文章请注明作者和出处,请勿用于任何商业用途。欢迎关注公众号「DevOps攻城狮」

相关文章

靠谱:在不删除和重建 GitHub 仓库的情况下与父(Fork)仓库分离(Unfork)
·693 字·2 分钟
本文介绍了如何通过 GitHub Support 实现与父仓库的分离,避免删除和重建仓库带来的数据丢失问题,帮助开发者更好地管理 Fork 的仓库。
程序员自我修养之Git提交信息和分支创建规范(工具篇)
·1268 字·3 分钟
本文介绍如何使用 Commit Check 工具来验证 Git 提交信息、分支命名、提交用户名字、提交用户邮箱等是否符合规范。
SLSA 框架与软件供应链安全防护
·2548 字·6 分钟
本文介绍了 SLSA 框架的概念、目的、等级划分以及如何在软件供应链中应用 SLSA 来提升安全性,帮助读者理解 SLSA 在软件开发和部署中的重要性。
如何在 DevOps 任务中使用 ChatGPT?
·1348 字·3 分钟
本文探讨如何在 DevOps 任务中使用 ChatGPT,包括自动化代码审查、测试、部署和文档生成等方面的应用。
为什么我的 Jenkins Controller 越来越慢?可能犯了这些错误...
·3163 字·7 分钟
本文介绍了 Jenkins pipeline 的一些最佳实践,旨在帮助开发者和运维人员优化 Jenkins 的性能和可维护性。
如何在 Jenkins 多分支流水线中实现 [skip ci]
·420 字·1 分钟
本文介绍如何在 Jenkins 多分支流水线中实现 [skip ci] 功能,根据提交信息跳过构建。