Git如何fork別人的倉庫並做爲貢獻者提交代碼

例如 要fork一份google的MLperf/inference代碼,下面介紹具體作法:
預備知識
git裏的參考有幾種表示,分別是上游倉庫,遠程倉庫和本地倉庫,邏輯關係以下
拉取代碼的順序:
別的大牛的代碼(上游倉庫)---------->你fork的代碼(遠程倉庫)---------->你電腦的代碼(本地倉庫)
提交代碼的順序:
別的大牛的代碼(上游倉庫)<----------你fork的代碼(遠程倉庫)<----------你電腦的代碼(本地倉庫)
每一個倉庫主分支是master,還能夠有其它分支
上游倉庫的表示爲 upstream,遠程倉庫表示爲originlinux

具體步驟
一、進入MLperf/inference倉庫,點擊fork按鈕,拷貝代碼到本身的git帳號的倉庫裏git

 

二、以後再本身的帳號裏就能夠看到fork的代碼了,能夠看到代碼的fork來源,即上游倉庫地址github


三、下載代碼到你的本地電腦裏,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"windows

# 查看祕鑰
cat ~/.ssh/id_rsa.pub安全

# 複製添加到你git帳號裏的ssh key列表裏,就能夠經過安全認證傳輸數據了ssh


# 將遠程git庫代碼下載到本地 (origin表明遠程倉庫,master表明主分支)
git pull origin master工具

代碼下載完了以後,這時候你本地倉庫和遠程倉庫的代碼一致了,接下來對代碼進行修改
四、修改本地倉庫的代碼並提交到遠程倉庫
假設咱們要修改README.md文件,有兩種方式可供選擇:
---------------------------------------------------------------------------------------------------------------------------
第一種方式,直接在master分支上作修改,命令以下:
# 修改README.md
$ echo "abc" >> README.md
# 添加要提交的臨時文件
$ git add README.md
# 提交更改
$ git commit -m 'commit'
# 將本地倉庫的修改上傳到遠程倉庫
$ git push -u origin mastergoogle

---------------------------------------------------------------------------------------------------------------------------
第二種方式,在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
五、將遠程倉庫的代碼提交到上游倉庫:
進入GitHub帳號的遠程倉庫,此時已經可以看到剛剛從本地倉庫提交的修改了,而後點擊New pull requestblog

進入結果對比頁面,以下圖所示:

能夠看到從遠程庫的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

相關文章
相關標籤/搜索