Git中Fork使用

2023-05-16

GitLab或者GitHub中的Fork可以理解为一个物理副本,用来管理代码的一种手段。

在参与开源项目代码贡献时,通常不会直接获得源代码仓库的Developer权限。这点和一般公司开发不太一样,公司一般都是设置在分支上是否有Push权限。使用Fork将代码物理复制一份在自己的NameSpaces下进行代码开发,开发时可对分支做任意的更改、删除以及commit或者push,过程中完全像是开发自己的代码一样。

什么是Fork

GitLab或者GitHub中的Fork可以理解为一个物理副本,用来管理代码的一种手段。

在参与开源项目代码贡献时,通常不会直接获得源代码仓库的Developer权限。这点和一般公司开发不太一样,公司一般都是设置在分支上是否有Push权限。使用Fork将代码物理复制一份在自己的NameSpaces下进行代码开发,开发时可对分支做任意的更改、删除以及commit或者push,过程中完全像是开发自己的代码一样。

如何进行Fork

以GitLab为例。首先,使用张三创建一个名为xlog的项目,项目权限为Owner,同时设置李四的权限为Reporter。如下:

image-20221205230013156

然后在张三的账号可以看到如下结构:

image-20221205230955686

使用张三的账号点击进入xlog项目,如下:

image-20221205231400596

点击右上角Fork,如下:

image-20221205231605196

核心点:

  1. 选择一个namespace,一般都是选择自己的GitLab名字
  2. 选择可见级别,默认private
  3. 输入项目名字,一般都是默认

最后点击Fork Project,完成Fork,如下图:

image-20221205231912499

将远程仓库更新到Fork仓库

在GitLab或者GitHub平台上,开发者张三Fork了开发李四的项目以后,如果后续李四继续提交项目,那么张三在Fork的代码中如何获得更新?

1、给Fork库配置远程仓库位置,先查看远程仓库状态:

$ git remote -v
origin  http://lisi:dockerOne@192.168.109.115/lisi/xlog.git (fetch)
origin  http://lisi:dockerOne@192.168.109.115/lisi/xlog.git (push)

2、为Fork库添加远程upstream地址:

$ git remote add upstream http://192.168.109.112/zhangsan/xlog.git

3、使用git remote -v检查是否配置成功:

$ git remote -v
origin  http://lisi:dockerOne@192.168.109.115/lisi/xlog.git (fetch)
origin  http://lisi:dockerOne@192.168.109.115/lisi/xlog.git (push)
upstream        http://192.168.109.115/zhangsan/xlog.git (fetch)
upstream        http://192.168.109.115/zhangsan/xlog.git (push)

4、抓取远程upstream

$ git fetch upstream

5、查看upstream日志,如下命令和图例:

$ git log --all --graph --oneline

* 71d3aa7 (upstream/main) 测试Fork
* 9ca3f3b (HEAD -> main, origin/main, origin/HEAD) no message

6、将远程upstream上的代码merge到Fork

git merge upstream/main

7、将本地Fork的代码提交

git push origin main

推荐:

Gitlab CE安装

Git命令小本本

参考:

https://blog.csdn.net/weixin_43517190/article/details/125159723

https://blog.csdn.net/u013673437/article/details/127198924

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Git中Fork使用 的相关文章

  • `git ls-files -s` 输出中不同字段的含义是什么?

    在 Git 中 命令返回的典型结果行git ls files s好像 100755 be2c2e9b0966253096472d4b482c458bc892e493 0 gitignore 这些字段是什么意思 不用再犹豫了git ls fi
  • git 显示已添加到 gitignore 的文件中的更改?

    我已经将 log2 文件夹和 main js 文件添加到 gitignore 如屏幕截图所示 但即使执行后git rm cached r我仍然可以看到 git 正在检测 main js 和 log2 文件夹内文件的更改 怎么会 这些的常见问
  • 致命:.git/info/refs 无效:这是一个 git 存储库吗?

    我有一个托管在 Assembla 上的 Git 存储库 我正在尝试执行以下操作 git push u origin master 我一遍又一遍地收到以下错误 fatal https url repo name git info refs n
  • .gitconfig 别名函数调用

    我在 gitconfig 中定义了以下别名 alias teamcity tc tc是我在我的中定义的一个shell函数 bashrc文件 由于某种原因 我收到以下错误 aafghani 03 git workday amirafghani
  • 在 Windows 7 上的 Sourcetree 中比较 Word docx 文件

    我一直在尝试获取在 Windows 7 上的 Sourcetree 中工作的 Word docx 文件的文本差异 我已按照此处的说明进行操作将 Microsoft Word 与 git 结合使用 http blog martinfenner
  • 如何将工作树与提交进行比较?

    我在用着 git diff mycommit 用于比较我的工作树mycommit 但它似乎忽略当前索引中不存在的文件 您可以按如下方式重现它 git init echo A gt A txt git add git commit m A g
  • 创建一个空分支?

    我有一个包含项目的 git 存储库 我现在要对这个项目进行大规模的修改 如何为这次大修创建一个空白的新分支 然后当完成时 如何将这个分支切换到master 使用 checkout orphan 命令 git checkout orphan
  • 如何使用 Git 跟踪目录而不是文件?

    我最近开始使用 Git 但只有一件事遇到了麻烦 如何在不跟踪目录内容的情况下跟踪目录 例如 我正在开发的网站允许上传 我想跟踪上传目录 以便在分支等时创建它 但显然不是其中的文件 在开发分支中的测试文件或主控中的真实文件 在我的 gitig
  • Git 2.2.x 无缘无故更新旧包文件的时间戳

    Git 2 2 0 和 2 2 1 似乎修改了旧的时间戳 git objects pack pack pack偶尔会无缘无故地文件 它只是改变时间戳 内容是相同的 调试这一点很困难 因为它似乎很少进行更改 我在 2 2 0 之前的任何 Gi
  • 为所有子文件夹设置 git 配置值

    我知道可以设置每个存储库的配置来覆盖用户级配置 即 path to my repo gitconfig覆盖 gitconfig 是否可以设置 git 配置来覆盖给定文件夹的所有子文件夹的用户级设置 即 我有 topLevelFolder1
  • 使当前提交成为 Git 存储库中唯一(初始)提交?

    我目前有一个本地 Git 存储库 我将其推送到 Github 存储库 本地存储库有约 10 次提交 Github 存储库是其同步副本 我想要做的是从本地 Git 存储库中删除所有版本历史记录 以便存储库的当前内容显示为唯一提交 因此存储库中
  • 仅使用 Git grep 的文件名

    我只想查看文本中包含特定单词的不同文件 current directory git grep word 显示文件中具有匹配单词的每一行 所以我尝试了这个 current directory git grep word files with
  • 使用 gitignore 嵌套存储库。

    我想嵌套 2 个 git 存储库 我一直在阅读子模块 有一段时间我认为它很棒 我想我可能想要其他东西 这是我的情况 首先 我想我应该提到我的所有服务器都托管网站 并以 staging domain com 和 domain com 实时 模
  • Eclipse Git 关键字扩展

    每次我检查 git hub 服务器的源代码时 我都需要更新源代码修订关键字 version date 等 你可能知道 Git 中的主要问题是你无法使用以下命令修改文件 提交后有关提交的信息 因为 Git 首先对文件进行校验 基本上我想要实现
  • 通过 ruby​​ 进程共享变量

    我正在编写一个 gem 其中我必须分叉两个进程来启动两个 webrick 服务器 我想通过基类的类方法启动该服务器 因为应该只运行这两个服务器 而不是多个服务器 在运行时 我想调用这两台服务器上的一些方法来更改变量 我的问题是 我无法通过基
  • git 2.32 git push -u origin master 没有任何反应

    I ve starting to use git github and I m stucked on how to push my codes to github I m following some tutorials and when
  • git merge 冲突的不同场景

    我试图了解 git 合并后可能发生 git 冲突的情况以及如何避免它们 我创建了一个 git 存储库并向其中添加了一个文本文件 我已将 1 添加到文本文件中并将其提交给 master 我已经从 master 创建了一个新分支 分支 2 并将
  • Git - 远程:错误:无法运行钩子/后接收:没有这样的文件或目录

    我收到错误 remote error cannot run hooks post receive No such file or directory 当尝试推送到远程时 接收后文件存在于正确的位置 testnew git hooks 并包含
  • 具有单个子模块的多个存储库

    我已经找了一段时间但没有找到答案 也许我不知道该看什么 我们有一个主库 它本身就是一个存储库 我们称之为 Lib 它包含我们的大部分模块和子模块 我们还假设它的大小为 2GB 现在我们有很多项目 例如 ProjA ProjB ProjC 每
  • git 推送到 github 失败并显示“错误:pack-objects 因信号 967 死亡”

    我触发了这个命令 git push origin master 我得到这个结果 Counting objects 15626 done Delta compression using up to 4 threads error pack o

随机推荐