Git如何fork别人的仓库并作为贡献者提交代码
例如 要fork一份google的MLperf/inference代码,下面介绍具体做法:
预备知识
git里的参考有几种表示,分别是上游仓库,远程仓库和本地仓库,逻辑关系如下
拉取代码的顺序:
别的大牛的代码(上游仓库)---------->你fork的代码(远程仓库)---------->你电脑的代码(本地仓库)
提交代码的顺序:
别的大牛的代码(上游仓库)<----------你fork的代码(远程仓库)<----------你电脑的代码(本地仓库)
每个仓库主分支是master,还可以有其它分支
上游仓库的表示为 upstream,远程仓库表示为origin
具体步骤
1、进入MLperf/inference仓库,点击fork按钮,拷贝代码到自己的git账号的仓库里

2、之后再自己的账号里就可以看到fork的代码了,可以看到代码的fork来源,即上游仓库地址

3、下载代码到你的本地电脑里,windows可以使用GitBash工具类似linux命令行的操作
下面是在本地电脑里进行的操作:
# 创建inference目录
$ mkdir inference
# 切换到inference目录
$ cd inference
# 创建并初始化git库
$ git init
# 添加远程git仓库
$ git remote add origin https://github.com/yananYangYSU/inference.git
# 添加SSH秘钥到git远程库,邮箱可以从git账号里查看
$ ssh-keygen -t rsa -C "1131074225@qq.com"

# 查看秘钥
cat ~/.ssh/id_rsa.pub

# 复制添加到你git账号里的ssh key列表里,就可以通过安全认证传输数据了

# 将远程git库代码下载到本地 (origin代表远程仓库,master代表主分支)
git pull origin master

代码下载完了之后,这时候你本地仓库和远程仓库的代码一致了,接下来对代码进行修改
4、修改本地仓库的代码并提交到远程仓库
假设我们要修改README.md文件,有两种方式可供选择:
---------------------------------------------------------------------------------------------------------------------------
第一种方式,直接在master分支上做修改,命令如下:
# 修改README.md
$ echo "abc" >> README.md
# 添加要提交的临时文件
$ git add README.md
# 提交更改
$ git commit -m 'commit'
# 将本地仓库的修改上传到远程仓库
$ git push -u origin master
---------------------------------------------------------------------------------------------------------------------------
第二种方式,在master分支基础上切出一个dev分支,然后在dev分支上修改,修改完成后,再将dev分支merge到master分支
# 首先切换到dev分支
$ git checkout -b dev
$ echo "abc" >> README.md
# 添加要提交的临时文件
$ git add README.md
# 提交更改
$ git commit -m 'commit'
# 将本地仓库的修改上传到远程仓库
$ git checkout master
$ git merge dev
# 将本地仓库的修改上传到远程仓库
$ git push -u origin master
---------------------------------------------------------------------------------------------------------------------------
注意如果再push之前,上游仓库有人做了代码修改,那么此时你本地和远程仓库的代码就不是最新的了,此时需要把上游仓库的代码合并到本地,然后再push到远程仓库
# 添加上游仓库地址
$ git remote add upstream https://github.com/mlperf/inference.git
# 查看 origin 和 upstream 对应的仓库是否正确
$ git remote -v

origin对应的是自己github的地址,即yourname/project
upstream对应的是原项目的地址,即sourcename/project
# 从上游仓库获取最新的代码合并到自己本地仓库的master分支上
$ git pull upstream master
推荐每次代码待提交前,都从原项目拉取一下最新的代码,最后再使用git push命令将改动同步到自己的Github远程仓库中:
$ git push -u origin master
5、将远程仓库的代码提交到上游仓库:
进入GitHub账号的远程仓库,此时已经能够看到刚刚从本地仓库提交的修改了,然后点击New pull request

进入结果对比页面,如下图所示:

可以看到从远程库的master分支向上游仓库的master分支申请提交代码
Able to merge代表你的代码与上游代码没有冲突,可以提交
然后点击 create pull request,进入下面页面:

填写注释,描述你所作的修改,然后点击右下角提交

然后进入上游仓库的地址,在上游仓库的Pull requests列表里就可以看到自己的提交请求了,等待作者审核即可
附录:
如果是google的代码,那么提交代码要同意开发者协议,此时需要注册Gmail邮箱,申请Google Individual CLA,然后使用通过验证的gmail邮箱去修改并提交代码,google的robot才会通过你的代码提交验证,不然提交的pull request申请是无法通过校验的
准备好gmail邮箱后,在github的账号里配置个人配置github邮箱

然后在git命令行里也要设置提交代码的邮箱
git config --global user.email example@gmail.com
然后再进行步骤1

Git如何fork别人的仓库并作为贡献者提交代码的更多相关文章
- Git的基本了解与使用、向github提交代码
#Git的基本了解与使用.向github提交代码- git:是一个版本控制系统.- github:一个代码托管提供商.开源网站.是一个面向开源及私有软件项目的托管平台,因为支持Git作为唯一的版本库格 ...
- git常用命令以及如何与fork别人的仓库保持同步
简单常用命令1.git status查看当前仓库是否有文件改动a:提示Your branch is up-to-date with 'origin/master'.nothing to commit, ...
- idea git拉取、合并、处理冲突、提交代码具体操作
早在两个月前我还在用eclipse开发,并且也发布的一些eclipse git的相关操作(操作都是本人亲自实践过的),但由于项目团队要求,开发工具统一用idea,实在不得已而为之切换了开发工具, 初次 ...
- git 更新fork的远程仓库
1.添加远程仓库到本地remote分支 git remote add upstream git@github.com:apache/flink.git # 远程仓库地址 2.查看当前仓库的远程分支 g ...
- Git Fork别人的代码后如同步别人的代码
在git上fork别人的代码后,如果别人代码有更新,自己fork的代码是不能自动更新的.需要手动操作. git remote -v 查看是否有远程分支的别名.例如:git remote -v 后显示如 ...
- 使用Git初始化本地仓库并首次提交代码
本文介绍使用Git初始化本地仓库,并首次提交代码到远程仓库GitLab上面. 首先,登录GitLab,创建一个新项目的私人仓库: 然后,在本地仓库(就是你写代码文件夹),右键,Git Bash Her ...
- Git安装与配置,以及pycharm提交代码到github
1.下载git,安装 下载好后直接下一步到底,安装成功(选择组件页面,可以勾选上控制台窗口字体选项,如下图) 2.配置Git信息 1.打开窗口中,输入:git --version 查看已安装的git版 ...
- fork 了别人的仓库后,如何将自己的代码和原仓库保持一致
fork 了别人的仓库后,如何将自己的代码和原仓库保持一致 git remote add upstream http:// git fetch upstream
- Git 执行 「fork 出来的仓库」和「最新版本的原仓库」内容同步更新
当我们在 GitHub 上 fork 出一个仓库后,如果原仓库更新了,此时怎样才能保证我们 fork 出来的仓库和原仓库内容一致呢?我们一般关注的是仓库的 master(主干分支)的内容,通过以下步骤 ...
随机推荐
- Creator3D 守护你的球球—UV动画与天空盒
1 游戏预览 在线体验地址:http://example.creator-star.cn/follo-ball/ 2 场景物体 场景物体 新建场景后,引擎会为我们创建默认的摄像机和灯光,这个我们就不介 ...
- Springboot】Springboot整合邮件服务(HTML/附件/模板-QQ、网易)
介绍 邮件服务是常用的服务之一,作用很多,对外可以给用户发送活动.营销广告等:对内可以发送系统监控报告与告警. 本文将介绍Springboot如何整合邮件服务,并给出不同邮件服务商的整合配置. 如图所 ...
- Java描述设计模式(15):责任链模式
本文源码:GitHub·点这里 || GitEE·点这里 一.生活场景描述 1.请假审批流程 公司常见的请假审批流程:请假天数 当 day<=3 天,项目经理审批 当 3<day<= ...
- 关于Stream的知识分享
一.什么是Stream 查了一下MSDN,他是这么解释的:提供字节序列的一般视图. 这个解释有点太笼统了,下面,我们来仔细的捋一下 1.什么是字节序列? 字节序列指的是:字节对象被存储为连续的字节序列 ...
- [JZOJ4737] 【NOIP2016提高A组模拟8.25】金色丝线将瞬间一分为二
Description Input Output Sample Input 5 101 12 23 34 45 5 Sample Output 4 Data Constraint Hint 开long ...
- Snagit卸载不彻底的问题
Snagit是一款优秀的截图录屏软件,尤其是他的编辑器.方便的复制粘贴功能比较好用. 但是,卸载不完全绝对是一件烦人的事情. 可能的解决方案: 1.sfc /scannow >> CBS. ...
- linux下执行脚本失败的解决办法
现象: 1的解决办法:赋予该文件可执行权限即可,chmod +x docker.sh 2的解决办法:https://blog.csdn.net/youzhouliu/article/details/7 ...
- solr学习篇(三) solr7.4 连接MySQL数据库
目录 导入相关jar包 配置连接信息 将数据库导入到solr中 验证是否成功 创建一个Core,创建Core的方法之前已经很详细的讲解过了,如果还是不清楚请参考 solr7.4 安装配置篇: 1.导入 ...
- Windows下NFS服务器SFU设置(可以共享linux系统)
一.安装SFU1.下载软件SFU http://download.microsoft.com/download/a/1/c/a1ca7af1-a6e3-46e7-874a-4c5d8c0fb3b7/S ...
- Jdk14都要出了,还不能使用 Optional优雅的处理空指针?
1. 前言 如果你没有处理过空指针,那么你不是一位真正的 Java 程序员. 空指针确实会产生很多问题,我们经常遇到空的引用,然后又想从这个空的引用上去获取其他的值,接着理所当然的碰到了 NullPo ...