例如 要fork一份google的MLperf/inference代碼,下面介紹具體做法:
預備知識
git里的參考有幾種表示,分別是上游倉庫,遠程倉庫和本地倉庫,邏輯關系如下
拉取代碼的順序:
別的大牛的代碼(上游倉庫)---------->你fork的代碼(遠程倉庫)---------->你電腦的代碼(本地倉庫)
提交代碼的順序:
別的大牛的代碼(上游倉庫)<----------你fork的代碼(遠程倉庫)<----------你電腦的代碼(本地倉庫)
每個倉庫主分支是master,還可以有其它分支
上游倉庫的表示為 upstream,遠程倉庫表示為origin
具體步驟
1、進入MLperf/inference倉庫,點擊fork按鈕,拷貝代碼到自己的git賬號的倉庫里
2、之后再自己的賬號里就可以看到fork的代碼了,可以看到代碼的fork來源,即上游倉庫地址
3、下載代碼到你的本地電腦里,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"
# 查看秘鑰
cat ~/.ssh/id_rsa.pub
# 復制添加到你git賬號里的ssh key列表里,就可以通過安全認證傳輸數據了
# 將遠程git庫代碼下載到本地 (origin代表遠程倉庫,master代表主分支)
git pull origin master
代碼下載完了之后,這時候你本地倉庫和遠程倉庫的代碼一致了,接下來對代碼進行修改
4、修改本地倉庫的代碼並提交到遠程倉庫
假設我們要修改README.md文件,有兩種方式可供選擇:
---------------------------------------------------------------------------------------------------------------------------
第一種方式,直接在master分支上做修改,命令如下:
# 修改README.md
$ echo "abc" >> README.md
# 添加要提交的臨時文件
$ git add README.md
# 提交更改
$ git commit -m 'commit'
# 將本地倉庫的修改上傳到遠程倉庫
$ git push -u origin master
---------------------------------------------------------------------------------------------------------------------------
第二種方式,在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
5、將遠程倉庫的代碼提交到上游倉庫:
進入GitHub賬號的遠程倉庫,此時已經能夠看到剛剛從本地倉庫提交的修改了,然后點擊New pull request
進入結果對比頁面,如下圖所示:
可以看到從遠程庫的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