Github和Git上fork指南

小 樓 一 夜 聽 春 雨發表於2018-01-15

現在有這樣一種情形:有一個叫做Joe的程式猿寫了一個遊戲程式,而你可能要去改進它。並且Joe將他的程式碼放在了GitHub倉庫上。下面是你要做的事情:

Alt text

fork並且更新GitHub倉庫的圖表演示

  1. Fork他的倉庫:這是GitHub操作,這個操作會複製Joe的倉庫(包括檔案,提交歷史,issues,和其餘一些東西)。複製後的倉庫在你自己的GitHub帳號下。目前,你本地計算機對這個倉庫沒有任何操作。

  2. Clone你的倉庫:這是Git操作。使用該操作讓你傳送"請給我發一份我倉庫的複製檔案"的命令給GitHub。現在這個倉庫就會儲存在你本地計算機上。

  3. 更新某些檔案:現在,你可以在任何程式或者環境下更新倉庫裡的檔案。

  4. 提交你的更改:這是Git操作。使用該操作讓你傳送"記錄我的更改"的命令至GitHub。此操作只在你的本地計算機上完成。

  5. 將你的更改push到你的GitHub倉庫:這是Git操作。使用該操作讓你傳送"這是我的修改"的資訊給GitHub。Push操作不會自動完成,所以直到你做了push操作,GitHub才知道你的提交。

  6. 給Joe傳送一個pull request:如果你認為Joe會接受你的修改,你就可以給他傳送一個pull request。這是GitHub操作,使用此操作可以幫助你和Joe交流你的修改,並且詢問Joe是否願意接受你的"pull request",當然,接不接受完全取決於他自己。

如果Joe接受了你的pull request,他將把那些修改拉到自己的倉庫。勝利!

同步一個fork

Joe和其餘貢獻者已經對這個專案做了一些修改,而你將在他們的修改的基礎上,還要再做一些修改。在你開始之前,你最好"同步你的fork",以確保在最新的複製版本里工作。下面是你要做的:

Alt text

同步GitHub fork的圖表示意圖

  1. 從Joe的倉庫中取出那些變化的檔案:這是Git操作,使用該命令讓你可以從Joe的倉庫獲取最新的檔案。

  2. 將這些修改合併到你自己的倉庫:這是Git操作,使用該命令使得那些修改更新到你的本地計算機(那些修改暫時存放在一個"分支"中)。記住:步驟1和2經常結合為一個命令使用,合併後的Git命令叫做"pull"。

  3. 將那些修改更新推送到你的GitHub倉庫(可選):記住,你本地計算機不會自動更新你的GitHub倉庫。所以,唯一更新GitHub倉庫的辦法就是將那些修改推送上去。你可以在步驟2完成後立即執行push,也可以等到你做了自己的一些修改,並已經本地提交後再執行推送操作。

比較一下fork和同步工作流程的區別:當你最初fork一個倉庫的時候,資訊的流向是從Joe的倉庫到你的倉庫,然後再到你本地計算機。但是最初的過程之後,資訊的流向是從Joe的倉庫到你的本地計算機,之後再到你的倉庫。

 

更新GitHub上自己 Fork 的程式碼與原作者的專案進度一致

在GitHub上我們會去fork別人的一個專案,這就在自己的Github上生成了一個與原作者專案互不影響的副本,自己可以將自己Github上的這個專案再clone到本地進行修改,修改後再push,只有自己Github上的專案會發生改變,而原作者專案並不會受影響,避免了原作者專案被汙染。但經過一段時間, 有可能作者原來的程式碼變化很大, 你想接著在他最新的程式碼上修改, 這時你需要合併原作者的最新程式碼過來, 讓你的專案變成最新的。 
1、先克隆專案到本地: 
git clone https://github.com/iakuf/mojo 
cd mojo 
2、新增原作者專案的 remote 地址, 然後將程式碼 fetch 過來 
git remote add sri https://github.com/kraih/mojo 
git fetch sri 
‘sri’相當於一個別名 
檢視本地專案目錄: git remote -v 
3、合併 
git checkout master 
git merge sri/master 
如果有衝突的話,需要丟掉本地分支: 
git reset –hard sri/master 
4、這時你的當前本地的專案變成和原作者的主專案一樣了,可以把它提交到你的GitHub庫 
git commit -am ‘更新到原作者的主分支’ 
git push origin 
git push -u origin master -f –強制提交

 

相關文章