例如 要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别人的仓库并作为贡献者提交代码的更多相关文章

  1. Git的基本了解与使用、向github提交代码

    #Git的基本了解与使用.向github提交代码- git:是一个版本控制系统.- github:一个代码托管提供商.开源网站.是一个面向开源及私有软件项目的托管平台,因为支持Git作为唯一的版本库格 ...

  2. git常用命令以及如何与fork别人的仓库保持同步

    简单常用命令1.git status查看当前仓库是否有文件改动a:提示Your branch is up-to-date with 'origin/master'.nothing to commit, ...

  3. idea git拉取、合并、处理冲突、提交代码具体操作

    早在两个月前我还在用eclipse开发,并且也发布的一些eclipse git的相关操作(操作都是本人亲自实践过的),但由于项目团队要求,开发工具统一用idea,实在不得已而为之切换了开发工具, 初次 ...

  4. git 更新fork的远程仓库

    1.添加远程仓库到本地remote分支 git remote add upstream git@github.com:apache/flink.git # 远程仓库地址 2.查看当前仓库的远程分支 g ...

  5. Git Fork别人的代码后如同步别人的代码

    在git上fork别人的代码后,如果别人代码有更新,自己fork的代码是不能自动更新的.需要手动操作. git remote -v 查看是否有远程分支的别名.例如:git remote -v 后显示如 ...

  6. 使用Git初始化本地仓库并首次提交代码

    本文介绍使用Git初始化本地仓库,并首次提交代码到远程仓库GitLab上面. 首先,登录GitLab,创建一个新项目的私人仓库: 然后,在本地仓库(就是你写代码文件夹),右键,Git Bash Her ...

  7. Git安装与配置,以及pycharm提交代码到github

    1.下载git,安装 下载好后直接下一步到底,安装成功(选择组件页面,可以勾选上控制台窗口字体选项,如下图) 2.配置Git信息 1.打开窗口中,输入:git --version 查看已安装的git版 ...

  8. fork 了别人的仓库后,如何将自己的代码和原仓库保持一致

    fork 了别人的仓库后,如何将自己的代码和原仓库保持一致 git remote add upstream http:// git fetch upstream  

  9. Git 执行 「fork 出来的仓库」和「最新版本的原仓库」内容同步更新

    当我们在 GitHub 上 fork 出一个仓库后,如果原仓库更新了,此时怎样才能保证我们 fork 出来的仓库和原仓库内容一致呢?我们一般关注的是仓库的 master(主干分支)的内容,通过以下步骤 ...

随机推荐

  1. 《深入理解Java虚拟机》-----第12章 Java内存模型与线程

    概述 多任务处理在现代计算机操作系统中几乎已是一项必备的功能了.在许多情况下,让计算机同时去做几件事情,不仅是因为计算机的运算能力强大了,还有一个很重要的原因是计算机的运算速度与它的存储和通信子系统速 ...

  2. Maven项目下使用log4j

    Apache Log4j是一个基于Java的日志记录工具,它的日志级别按下面顺序递减: 级别 描述 OFF 最高级别,用于关闭日志记录. FATAL 将导致应用程序提前终止的严重错误的信息将立即呈现在 ...

  3. Tomcat基本知识(一)

    顶层架构先上一张Tomcat的顶层结构图(图A),如下: Tomcat中最顶层的容器是Server,代表着整个服务器,从上图中可以看出,一个Server可以包含至少一个Service,用于具体提供服务 ...

  4. drf框架中分页组件

    drf框架中分页组件 普通分页(最常用) 自定制分页类 pagination.py from rest_framework.pagination import PageNumberPagination ...

  5. B/S 端基于 HTML5 + WebGL 的 VR 3D 机房数据中心可视化

    前言 在 3D 机房数据中心可视化应用中,随着视频监控联网系统的不断普及和发展, 网络摄像机更多的应用于监控系统中,尤其是高清时代的来临,更加快了网络摄像机的发展和应用. 在监控摄像机数量的不断庞大的 ...

  6. java命令行导出、导入sql文件

    @IocBean public class SqlCommandModel{ //用户名 @Inject("java:$conf.get('jdbc.username')") pr ...

  7. i春秋DMZ大型靶场实验(三)内网转发DMZ2

    更具实验文件知道存在源码泄露  下载源码进行源码审计 发现admin账号 查看user.php 发现mysql 账号 端口 对登录后源码进行审计 发现上传文件的两处漏洞 对 fiel name 可以 ...

  8. shell传递参数(三)

    $n:n代表一个数字,指执行脚本的第n个参数.特别地,$0指执行的文件名 [root@ipha-dev71- exercise_shell]# cat test.sh #!/bin/bash echo ...

  9. 在VM上安装OpenWrt

    1.选择'自定义',点击'下一步' 2.'硬件兼容性'默认,点击'下一步' 3.'稍后安装操作系统',点击'下一步' 4.客户机操作系统'Linux' 版本'CentOS 64位',点击'下一步' 说 ...

  10. CentOS7使用‘中科大源’

    中科大的源质量速度都不错,推荐使用. 这里列出CentOS 7的Base和epel的源. 进入/etc/yum.repos.d/中,将原本的几个repo文件备份,之后新建三个repo文件 内容如下: ...