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(主干分支)的内容,通过以下步骤 ...
随机推荐
- 部署主从dns
主机部署:yum安装DNS服务和依赖 [admin@haifly-bj-dns1 ~]$ sudo yum install bind-chroot启动named-chroot服务 [admin@hai ...
- 利用sed将xml报文转换为分隔符形式报文
原始xml文本如下 <?xml version="1.0" encoding="utf-8"?> <Message> <Heade ...
- ios手机通过fiddler抓去Https协议包时证书问题
解决Fiddler无法抓取ios端HTTPS请求的问题 南天E心 关注 2018.01.15 10:36 字数 281 阅读 909评论 0喜欢 0 近日公司服务升级,将所有的接口请求由HTTP升级为 ...
- redhat5配置网络源
最近适配了一堆linux系统, Redhat4/5/6, ubuntu 12/14/16, Suse 10/11/12 其中适配到Red5 时候配置网络源 # The mirror system us ...
- Jenkins部署(基于windows)
一.安装jdk,配置环境变量 二.安装tomcat和jenkins 1.检查电脑上8080端口是否被占用: 命令行中输入:netstat -ano 2.下载Tomcat Tomcat官方网站:http ...
- Angular/Vue多复选框勾选问题
此页面效果以Angular实现,Vue也可按照其大致流程实现,其核心本质没有改变. 功能效果为:页面初始化效果为要有所有角色的复选框,要求初始化默认勾选的角色要显示勾选,之后,能按照最终勾选的状态提交 ...
- Unity3D 通过JSON查询天气
一.天气查询API 获取天气信息,首先要找到提供天气数据的接口,我使用的是高德地图免费为我们提供的,网址为 https://lbs.amap.com/api/webservice/guide/api/ ...
- 利用Tampermonkey(油猴)+IDM实现百度云盘大文件下载;
1.浏览器的脚本选择: 说明:不同的浏览器安装的名称不一样,这里采用Firefox做测试,同样可按照以下列表对应下载: Chrome:Tampermonkey 或 Violent monkey Fir ...
- 整洁的 Table View 代码
Table view 是 iOS 应用程序中非常通用的组件.许多代码和 table view 都有直接或间接的关系,随便举几个例子,比如提供数据.更新 table view,控制它的行为以及响应选择事 ...
- 用Python新建用户并产生随机密码
说明:本次代码是在Linux下执行的,windows也可以用,把添加用户密码的命令改成windows的就ok了 用Python新建用户并产生随机密码 import passwd_name as pn ...