首次开发
一、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同步上游仓库,再将远程仓库拉取到本地,再开发,再同步
- 第一种省事一些
二、继续重复以上流程
三、如果在同步时出现问题
- 本地仓库有修改,但是是新增修改
则拉取不受影响,依然成功,示例如下:
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
)
- 本地仓库有修改,且不是增量修改
这里我删除了本地的一个文件夹(包括下面的文件),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
是只考虑变化,而不在意绝对值
- 本地push到远程
因为在一、同步代码
讲过,本地同步上游仓库后,需要push到自己的远程仓库,那么在本地修改的时候,push到远程仓库,会不会有冲突呢?
- 没有
git add .
,git commit -m "xxx"
的操作,直接push,没有冲突,只是将这次的修改(变化)提交到远程仓库 - 进行了相应提交,但要同步到远程仓库,这其实等同于同步了一次,做了自己的开发,又同步了一次
- 什么时候会有冲突?
待补充。。。