菜鸟科技网

git fork命令与git clone有何本质区别?

git fork 不是一个 Git 命令

git fork命令与git clone有何本质区别?-图1
(图片来源网络,侵删)

你不会在本地通过 git fork 来执行任何操作。fork 是一个发生在代码托管平台(如 GitHub, GitLab, Bitbucket)上的概念,而不是一个 Git 自身的命令。


什么是 Fork?

你可以把 Fork 理解为 “复制”“派生” 一个仓库,当你点击一个仓库的 "Fork" 按钮时,代码托管平台会为你创建一个该仓库的完整副本。

这个副本具有以下特点:

  • 独立存在:它存在于你自己的账户下,与原始仓库完全分离。
  • 起始点相同:Fork 出来的仓库在创建的那一刻,其内容与原始仓库完全一致。
  • 拥有独立的管理权:你可以对这个副本进行任何操作,比如提交代码、创建分支、拉取请求等,而不会影响原始仓库。

为什么需要 Fork?

Fork 是开源社区协作工作流的核心,它的主要目的有两个:

git fork命令与git clone有何本质区别?-图2
(图片来源网络,侵删)

a. 贡献代码给他人

这是最常见的用法,当你想为一个你并不拥有维护权的开源项目(比如一个流行的库、框架)贡献代码时,你不能直接在原始仓库上创建分支,正确的流程是:

  1. Fork:将原始仓库复制到你自己的名下。
  2. Clone:把你自己的这个副本(Fork 仓库)克隆到本地电脑上。
  3. 修改 & 提交:在本地进行代码修改、测试,然后提交到你自己的仓库。
  4. Pull Request (PR):在你的仓库和原始仓库之间创建一个“拉取请求”,请求项目维护者将你的代码合并到他们的项目中。

b. 基于他人项目进行二次开发

如果你想基于一个优秀的开源项目,创建一个带有你自己功能的分支版本(一个 "衍生项目"),Fork 是最理想的方式。

  1. Fork:将项目复制到你自己的账户下。
  2. Clone & 开发:克隆到本地,按照你的想法进行开发和修改。
  3. 独立维护:你的衍生项目将独立于原始项目发展,你可以自由地发布版本,而无需获得原始项目维护者的许可。

Fork 的工作流程(以 GitHub 为例)

下面是一个典型的使用 Fork 向开源项目贡献代码的完整流程:

步骤 1:在 GitHub 上 Fork 仓库

  1. 打开你想要贡献的开源项目页面(https://github.com原作者/原项目名)。
  2. 点击页面右上角的 "Fork" 按钮。
  3. 等待几秒钟,你将会被重定向到你自己的 GitHub 页面,现在你拥有了一个 https://github.com你的用户名/原项目名 的仓库。

步骤 2:将 Fork 仓库克隆到本地

你需要把你自己的这个仓库(而不是原始仓库)克隆到你的电脑上。

git fork命令与git clone有何本质区别?-图3
(图片来源网络,侵删)
# 克隆你自己的 Fork 仓库到本地
git clone https://github.com你的用户名/原项目名.git
# 进入项目目录
cd 原项目名

步骤 3:添加上游仓库

为了能获取到原始仓库的最新更新(这非常重要!),你需要为你的本地仓库添加一个名为 upstream 的远程仓库,它指向原始仓库。

# 添加原始仓库为 "upstream" 远程仓库
git remote add upstream https://github.com原作者/原项目名.git

你可以用 git remote -v 查看你当前配置的所有远程仓库,现在应该能看到 origin(你自己的 Fork 仓库)和 upstream(原始仓库)。

步骤 4:保持你的 Fork 仓库与上游同步(可选但推荐)

在开始修改之前,最好先确保你的 Fork 仓库是最新的。

# 从上游仓库获取最新的分支和提交
git fetch upstream
# 切换到你的主分支(通常是 main 或 master)
git checkout main
# 将上游仓库的 main 分支合并到你的本地 main 分支
git merge upstream/main

现在你的本地 main 分支已经和原始仓库保持同步了。

步骤 5:创建并切换到新的分支

永远不要在主分支上直接修改代码!

# 创建一个描述新功能的分支,并立即切换过去
git checkout -b feature/my-awesome-feature

步骤 6:修改代码并提交

你可以在这个新分支上进行你的开发工作了。

# 进行代码修改...
# 添加修改的文件到暂存区
git add .
# 提交更改
git commit -m "feat: 添加了一个超级棒的新功能"

步骤 7:将你的分支推送到你的 Fork 仓库(origin)

git push origin feature/my-awesome-feature

步骤 8:创建 Pull Request (PR)

  1. 回到你的 GitHub 页面,进入你的 Fork 仓库。
  2. GitHub 会提示你有一个刚刚推送的分支,并有一个绿色的 "Compare & pull request" 按钮,点击它。
  3. 在 PR 页面,确保:
    • base repository(目标仓库)是原始仓库 (原作者/原项目名)。
    • base(目标分支)是 mainmaster
    • head repository(源仓库)是你自己的仓库 (你的用户名/原项目名)。
    • compare(源分支)是你刚刚推送的分支 (feature/my-awesome-feature)。
  4. 填写 PR 的标题和描述,清晰地说明你的修改内容和原因。
  5. 点击 "Create pull request"

你就完成了一次贡献!项目维护者会审查你的代码,并提供反馈,然后决定是否合并你的 PR。


git fork vs. git clone

特性 git fork (平台操作) git clone (Git 命令)
本质 平台操作,在网页上点击按钮 本地命令,在终端执行
结果 在你的账户下创建一个远程仓库副本 在你的电脑上创建一个本地仓库副本
关系 创建一个与原始仓库平行的、独立的新仓库 创建一个指向特定远程仓库的本地工作副本
目的 获取对他人项目的写权限(通过自己的副本) 获取一个项目到本地进行开发或查看

先 Fork,再 Clone,Fork 是获取远程的“写”权限,Clone 是把这个有“写”权限的仓库拉到本地。


  • git fork 不是一个 Git 命令,它是代码托管平台(如 GitHub)上的一个功能
  • Fork = 复制仓库,它会为你创建一个原始仓库的完整副本,并归你所有。
  • 主要用途:安全地贡献代码给他人项目,或基于他人项目进行二次开发。
  • 核心流程:Fork (复制) -> Clone (拉到本地) -> 修改 -> Push (推到自己的远程) -> Pull Request (请求合并)。
  • 最佳实践:记得为你的本地仓库添加 upstream 远程链接,以便随时同步原始项目的最新进展。
分享:
扫描分享到社交APP
上一篇
下一篇