1 如何 在github的某些 开源项目贡献自己的代码?
如何给开源项目贡献代码
分两种情况:
1.代码仓库管理者给你添加该仓库的写入权限,这样的话可以直接push
2.如果不能直接push(大多数情况),采用经典的fork & pull request来提交代码,下面讲述这种情况
fork & pull request
例如有个仓库 https://github.com/square-knight/mymodel.git
其采用了经典的分支开发模型,稳定后的代码提交到master分支,其余特性则在dev分支上进行开发,待成熟后合并回master分支。
首先, 到作者github 的 仓库主页, 先fork一个作者的仓库,fork可以理解copy 一份代码到自己的git 仓库下面 , fork 成功后 会看到自己的代码仓库里面 就有了别人的repo.
第一步 fork 项目
第二步
之后 在命令行里面 克隆 代码
git clone https://github.com/changyubiao/mymodel.git
在本地一顿改动, 和正常提交代码 流程一样.
git add xxx
git commit -m "xxxxx"
git push
第三步 可以在 自己的 仓库的里面 发起一个 pull request 给原作者
创建后 就进入 pull request 的页面 , 然后点击 merge pull request 按钮 并确认 就好了.
剩下的事情就是等待项目的开发者审批了 , 如果开发者 对你的代码有 争议,或者其他的建议,你可以继续修改, 让代码更加符合开发者的意思.
有的时候 随着 你fork 的代码, 原仓库的代码 有一些改动,和提交,这个时候 你可能需要把 最新的代码同步过来,然后在 进行pullrequest .
1 首先 需要 先配置一个上游的upstream
$ git remote -v
origin https://github.com/changyubiao/mymodel.git (fetch)
origin https://github.com/changyubiao/mymodel.git (push)
这是你自己的仓库
2 然后 要添加原作者的仓库地址 作为upstream
$ git remote add upstream https://github.com/square-knight/mymodel.git
添加完成后 ,可以看出 upstream 已经添加好了.
$ git remote -v
origin https://github.com/changyubiao/mymodel.git (fetch)
origin https://github.com/changyubiao/mymodel.git (push)
upstream https://github.com/square-knight/mymodel.git (fetch)
upstream https://github.com/square-knight/mymodel.git (push)
3 下面 就可以 更新代码了,
首先 fetch 一下 git fetch upstream
, 这个命令 会把upstream 仓库的 分支 copy 到本地 并且对应的名称是 upstream/分支名
master
分支 对应就是 upstream/master
分支
$ git fetch upstream
remote: Enumerating objects: 200, done.
remote: Counting objects: 100% (188/188), done.
remote: Compressing objects: 100% (109/109), done.
remote: Total 162 (delta 96), reused 101 (delta 51), pack-reused 0
Receiving objects: 100% (162/162), 3.15 MiB | 1.38 MiB/s, done.
Resolving deltas: 100% (96/96), completed with 11 local objects.
From https://github.com/square-knight/mymodel
* [new branch] dev -> upstream/dev
* [new branch] master -> upstream/master
4 切换到自己 的master 分支
git checkout master
5 把 upstream/master
合并到自己的master 分支
$ git merge upstream/master
Updating 90180ca..503f020
Fast-forward
.gitignore | 58 +-
Pipfile | 38 +-
README.md | 17 +-
app/CNN.py | 224 +
app/main.py | 281 +-
app/model.py | 210 +-
app/web/upload_service.py | 72 +-
...
resource/model/finger-model.meta | Bin 53024 -> 0 bytes
19 files changed, 6525 insertions(+), 333 deletions(-)
create mode 100644 app/CNN.py
create mode 100644 resource/app/ohmyfinger.apk
create mode 100644 resource/app/ohmyfinger_dep.apk
create mode 100644 resource/costs.txt
delete mode 100644 resource/model/checkpoint
delete mode 100644 resource/model/finger-model.data-00000-of-00001
delete mode 100644 resource/model/finger-model.index
delete mode 100644 resource/model/finger-model.meta
create mode 100644 resource/train.txt
create mode 100644 util/Model.py
create mode 100644 util/img_loader.py
6 这个时候 代码就合并到自己的分支了, 只需要推送到自己的分支就可以了
查看 git status
$ git status
On branch master
Your branch is ahead of 'origin/master' by 28 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
$ git push
好了 这样就可以原作者的分支 同步了. 之后 就可以愉快的开发,提交自己的代码,之后 创建一个 pull request 给原作者了.
参考官方文档
1. 配置一个上游的upstream
2. 同步更新fork的仓库