使用Git参加开源项目流程

首次开发

一、Fork到自己的仓库

登录自己的Github账号,找到想要参与的项目,点击Fork,就可以在自己的GitHub账户下创建一个区别于主仓库的分支仓库,以后自己的更改都会在自己的分支上进行,只有需要合入主仓库的时候,才会涉及到其他的操作,否则就像自己在开发一样

二、本地开发
  • git clone xxx,这里克隆的是自己的分支仓库
  • 本地开发,调试
  • git add .git commit -m "xxx"
三、合入主仓库
  • 同步到自己的远程仓库
  • 在自己的远程仓库下可以看到Pull Request,写入说明,提交,等待审核
  • 审核通过,一次开发流程结束(或者没成功merge,重新来)

后续开发

一、同步代码

等了一段时间,发现自己的远程仓库落后于主仓库:

具体而言就是主仓库还有其他开发者在不断去PR,合并了之后主仓库不断向前更新,但是和你的GitHub仓库没关系,和你的本地仓库更没有关系,你需要拉取最新的代码,然后再从最新的地方开始开发

为什么?

如果你继续在旧的分支上开发,等到你PR的时候,被其他开发者改动过的文件,在你这里还是旧版本,你的PR就会覆盖其他开发者的成果,而将其回退到旧的版本,应该会引发冲突而不能merge?(我猜的,没验证过,但既然开发流程是这样的,肯定有他的道理)

步骤:

# 添加上游仓库只需要一次,之后就从这个仓库拉取最新的代码
git remote add origin_online xxx
git pull origin_online master

# 将本地的新代码同步到自己的远程仓库
git push origin main

注意:

  • 远程应该还可以直接从GitHub上面sync,应该直接从Fork的源去同步的

如果从GitHub网页版点击同步,即同步自己的仓库和上游仓库,起到的效果和命令行应该是一样的,只不过还是要记着本地仓库也需要同步(本地不知道远程已经同步了,点击同步,取得链接后会反应过来),点击完成后显示Successfully fetched and fast-forwarded from upstream apachecn:master.

  • 注意本地分支名称是不是和远程仓库的分支名是否一致,否则会出现:error: failed to push some refs to xxx

总结:

  • 先将上游仓库拉取到本地,再将本地更新(这里可以先开发,再一起同步)同步到自己远程
  • 先从GitHub同步上游仓库,再将远程仓库拉取到本地,再开发,再同步
  • 第一种省事一些
二、继续重复以上流程
三、如果在同步时出现问题
  1. 本地仓库有修改,但是是新增修改

则拉取不受影响,依然成功,示例如下:

remote: Enumerating objects: 64, done.
remote: Counting objects: 100% (64/64), done.
remote: Compressing objects: 100% (37/37), done.
remote: Total 64 (delta 30), reused 59 (delta 27), pack-reused 0
Unpacking objects: 100% (64/64), 81.01 KiB | 153.00 KiB/s, done.
From https://github.com/apachecn/pytorch-doc-zh
 * branch            master     -> FETCH_HEAD
   aff111b..977be78  master     -> origin_online/master
Updating f8508e7..977be78
Fast-forward
 docs/2.0/img/sphx_glr_autogradyt_tutorial_001.png  | Bin 0 -> 24132 bytes
 docs/2.0/img/sphx_glr_autogradyt_tutorial_002.png  | Bin 0 -> 22027 bytes
 .../img/sphx_glr_tensorboardyt_tutorial_001.png    | Bin 0 -> 11658 bytes
 .../beginner/introyt/autogradyt_tutorial.md        | 621 +++++++++++++++++++++
 .../beginner/introyt/modelsyt_tutorial.md          | 387 +++++++++++++
 .../beginner/introyt/tensorboardyt_tutorial.md     | 344 ++++++++++++
 mkdocs.yml                                         |   8 +-
 7 files changed, 1356 insertions(+), 4 deletions(-)
 create mode 100644 docs/2.0/img/sphx_glr_autogradyt_tutorial_001.png
 create mode 100644 docs/2.0/img/sphx_glr_autogradyt_tutorial_002.png
 create mode 100644 docs/2.0/img/sphx_glr_tensorboardyt_tutorial_001.png
 create mode 100644 docs/2.0/tutorials/beginner/introyt/autogradyt_tutorial.md
 create mode 100644 docs/2.0/tutorials/beginner/introyt/modelsyt_tutorial.md
 create mode 100644 docs/2.0/tutorials/beginner/introyt/tensorboardyt_tutorial.md

此时本地只会和自己的远程仓库对比修改(因为git记录的是自己的远程仓库),而不是和上游仓库,所以依然会显示更改,依然可以提交

此时自己的远程仓库依然是旧的版本,所以要将此次远程仓库拉取下来的同步上去,在这种情况下,还会多一个提交步骤,因为有改动,如果是没有改动的话,就可以直接同步了(push

  1. 本地仓库有修改,且不是增量修改

这里我删除了本地的一个文件夹(包括下面的文件),git只是提示了我存在修改,拉取代码,正常,示例如下:

remote: Enumerating objects: 75, done.
remote: Counting objects: 100% (75/75), done.
remote: Compressing objects: 100% (42/42), done.
remote: Total 75 (delta 37), reused 70 (delta 33), pack-reused 0
Unpacking objects: 100% (75/75), 34.64 KiB | 51.00 KiB/s, done.
From https://github.com/apachecn/pytorch-doc-zh
 * branch            master     -> FETCH_HEAD
   977be78..c57f268  master     -> origin_online/master
Updating db97770..c57f268
Fast-forward
 docs/2.0/img/8ec7228e178647ed9c25273de4b9a270.jpg  | Bin 0 -> 5726 bytes
 docs/2.0/img/e1059aed76d89ed98d7519082b0f3d07.jpg  | Bin 0 -> 272424 bytes
 docs/2.0/img/sphx_glr_trainingyt_001.png           | Bin 0 -> 11658 bytes
 docs/2.0/tutorials/beginner/introyt/captumyt.md    | 330 +++++++++++++++
 docs/2.0/tutorials/beginner/introyt/trainingyt.md  | 453 +++++++++++++++++++++
 .../intermediate/reinforcement_q_learning.md       | 349 ++++++++++++++++
 mkdocs.yml                                         |  26 +-
 themes_material                                    |   2 +-
 8 files changed, 1147 insertions(+), 13 deletions(-)
 create mode 100644 docs/2.0/img/8ec7228e178647ed9c25273de4b9a270.jpg
 create mode 100644 docs/2.0/img/e1059aed76d89ed98d7519082b0f3d07.jpg
 create mode 100644 docs/2.0/img/sphx_glr_trainingyt_001.png
 create mode 100644 docs/2.0/tutorials/beginner/introyt/captumyt.md
 create mode 100644 docs/2.0/tutorials/beginner/introyt/trainingyt.md
 create mode 100644 docs/2.0/tutorials/intermediate/reinforcement_q_learning.md

所以我感觉git是只考虑变化,而不在意绝对值

  1. 本地push到远程

因为在一、同步代码讲过,本地同步上游仓库后,需要push到自己的远程仓库,那么在本地修改的时候,push到远程仓库,会不会有冲突呢?

  • 没有git add .git commit -m "xxx"的操作,直接push,没有冲突,只是将这次的修改(变化)提交到远程仓库
  • 进行了相应提交,但要同步到远程仓库,这其实等同于同步了一次,做了自己的开发,又同步了一次
  1. 什么时候会有冲突?

待补充。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值