refer to https://www.jianshu.com/p/fede3333205f

作者:hitchc
链接:https://www.jianshu.com/p/fede3333205f
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

在github上,当看到好的项目代码时,有两种方式可以将代码“下载”到本地。一是可以直接clone原项目,二是通过github的“fork”功能“拷贝”项目到我们自己的主页上,再从主页上clone“拷贝项目”。

两种方式最重要的区别是,如果我们修改了clone到本地的代码,想push一下,显然第一种方式不可行,因为项目的远程信息是别人的(通过git remote -v 可以查看),而第二种方式,由于创建者相当于是我们自己,是能够push的(当然先要add 和commit)。但是我们push之后,原项目的主人是看不到我们修改的代码的,如果想让原作者接受并merge你的修改,这时可以发起pull request,这样原作者就能收到pull request请求,并可以审阅你的代码是否合理,如果他比较满意,就可以merge你的修改,这样原项目就得到了完善,而你也就成为了光荣的“贡献者”之一。

一般情况我们是不需要fork的。很多人错误的在使用fork,把它当成一种“收藏”功能,这其实并没有什么必要。一来,可以直接用“watching”来关注该项目,当有新的issue,commit,pull request时,你会收到相应的邮件提醒(前提是设置了邮箱)。二来fork的项目只是保留了fork当时的状态,如果项目作者在你fork之后更新了项目,你是看不到的。这就带来一个问题:如何实现fork后的项目与原项目的同步?这是我今天参与一个项目的时候才意识到的,以前没有思考过这个问题(诸位莫要见怪)。查阅了一些资料,找到了一个比较简单可行的答案。方法如下:

我的主页上有一个项目“zhihu-api”,可以看到,它是从“lzjub567/zhihu-api”fork来的。

我的 zhihu-api

1. 将自己主页的项目clone到本地,如下图:

clone 项目zhih-api

此时,若我们查看项目的远程信息,发现结果都是关于我自己主页的,origin是分支名称:

查看项目远程信息

2. 为项目添加远程分支:

添加远程分支

其中 upstream是远程分支名,后面的链接是原作者的仓库地址,此时再重新查看项目的远程信息,发现多了upstream的信息,是刚刚添加的原作者的仓库

查看remote 信息

3. 如果远程项目进行了更新,我们需要从upstream分支进行拉取,这样本地的代码就和原作者的代码同步了。

拉取远程项目信息

4. 将本地代码提交到自己主页的分支,即origin上了,这样,我自己主页的项目就和原作者的项目进行了同步。

push到自己的分支

总结一下:实现fork的项目和原项目同步的方法是利用本地的项目作为“中转”,为本地的项目添加两个远程信息,拉取原仓库的新代码,push到自己的仓库上,就达到了“同步”。

实现这个目的的做法不止这一种,只是我刚好看到了,觉得比较简单,就记录到这里备忘。

github如何实现fork的项目与原项目同步的更多相关文章

  1. Git进行fork后如何与原仓库同步

    在进行Git协同开发的时候,往往会去fork一个仓库到自己的Git中,过一段时间以后,原仓库可能会有各种提交以及修改,很可惜,Git本身并没有自动进行同步的机制,这个需要手动去执行.name如何进行自 ...

  2. Github进行fork后如何与原仓库同步

    https://blog.csdn.net/myuantao3286286/article/details/50477139

  3. github上fork原项目,如何将本地仓库代码更新到最新版本?

    场景: 在github上fork原项目,项目组成员发起pull request提交了代码,这时自己在本地仓库该如何更新到最新代码? 操作方法如下: 方法一.从github上进行操作然后更新 登录自己的 ...

  4. GitHub上fork一个项目贡献代码以及同步原作者的修改【转】

    如何贡献自己的力量 首先你总得有自己的github帐号吧,注册一个,非常简单,只需用户名,邮箱,密码,邮箱只是用来找回密码的,不做验证.因此注册后立即能用!比如我现在新注册一个叫JsLouvre的示范 ...

  5. Github中进行fork后,原仓库更新了如何与原仓库同步

    我们经常在Github中Fork别人优秀的项目(在自己的GitHub下面生成一个repository),如果原仓库作者或组织更新仓库,此时你Fork的项目并不会更新,如果我们想要更新操作,该如何操作? ...

  6. github上fork了别人的项目后,再同步更新别人的提交(转)

    原文地址:github上fork了别人的项目后,再同步更新别人的提交 我从github网站和用git命令两种方式说一下. github网站上操作 打开自己的仓库,进入code下面. 点击new pul ...

  7. github上更新fork的别人的项目

    直接上解决方案的步骤 (1)在自己fork后的项目的位置上,点击New pull request. (2)比较和原创版本(base)的变化 (3 ) compare across forks. 使得左 ...

  8. 【转】github更新自己Fork的代码

    github更新自己Fork的代码 时间 2014-03-02 23:25:55  micmiu - 软件开发 原文  http://www.micmiu.com/software/build/git ...

  9. Golang优秀开源项目汇总, 10大流行Go语言开源项目, golang 开源项目全集(golang/go/wiki/Projects), GitHub上优秀的Go开源项目

    Golang优秀开源项目汇总(持续更新...)我把这个汇总放在github上了, 后面更新也会在github上更新. https://github.com/hackstoic/golang-open- ...

随机推荐

  1. LOJ #6010. 「网络流 24 题」数字梯形

    #6010. 「网络流 24 题」数字梯形   题目描述 给定一个由 n nn 行数字组成的数字梯形如下图所示.梯形的第一行有 m mm 个数字.从梯形的顶部的 m mm 个数字开始,在每个数字处可以 ...

  2. 在Foxmail中添加阿里云企业邮箱账号

    1.安装完成Foxmail之后,新建账号 输入阿里云邮箱地址和密码,点击创建 接受服务器类型你可以选择POP3或者IMAP,在这里我选择的是POP3 点击创建,大功告成. 为什么要写这篇文章呢? 因为 ...

  3. loj2062 [HAOI2016]地图

    ref #include <algorithm> #include <iostream> #include <cstdio> #include <cmath& ...

  4. SXCPC2018 nucoj2004 国王的怪癖

    可持久化trie.考场上我脑补了一个trie树合并也A了 #include <iostream> #include <cstring> #include <cstdio& ...

  5. laravel5.2总结--数据迁移

          迁移就像是数据库中的版本控制,它让团队能够轻松的修改跟共享应用程序的数据库结构.   1 创建一个迁移 1.1 使用artisan命令make:migration来创建一个新的迁移: ph ...

  6. 线段树&树状数组模板

    树状数组: #include <bits/stdc++.h> using namespace std; ; struct binit { int a[MAXN], n; void modi ...

  7. Python-S9-Day114——Flask开始实战

    01 今日内容概要 02 课前分享 03 内容回顾 04 路飞学城表结构(一) 05 路飞学城表结构(二) 06 路飞学城立即支付思路 07 今日作业 08 初识Flask 09 werkzug 10 ...

  8. docker常用命令整理

    Docker常见用法整理 Docker 使用客户端-服务器 (C/S) 架构模式,使用远程API来管理和创建Docker容器. Docker 容器通过 Docker 镜像来创建.容器与镜像的关系类似于 ...

  9. js判断时间是否过期

    var myDate=new Date(); myDate.setFullYear(2014,2,1); //2014年3月1日 //注意:表示月份的参数介于 0 到 11 之间.也就是说,如果希望把 ...

  10. PHP简单登录退出代码

    PHP简单登录退出代码 登录页面login.html 负责收集用户填写的登录信息.  <html> <head> <title></title> < ...