????????fork 就是復制一個代碼倉庫。fork 一個代碼倉庫之后,你就可以任意的嘗試去修改代碼,而不會影響到源項目。
?????????fork 通常用在你打算修改別人的項目,或者使用別人的項目作為實現自己想法的開端。
修改別人的項目
????????修改別人項目的一個很好的例子就是修復 bug。當你發現一個 bug 時可以通過 issue 來記錄,但是更好的方式是:
- 拷貝那個項目
- 將發現的 bug 進行修復
- 提交一個 pull request 給項目的擁有者
????????如果項目的擁有者認同你做出的修改,他們可能會將你修復的內容加入原來的項目。
fork一個實例倉庫
fork 一個倉庫僅僅需要兩步操作。你可以通過我們創建了一個倉庫來練習:
- 在 GitHub 上,跳轉到 dzenbot/DZNEmptyDataSet 倉庫
- 在頁面的右上角,點擊
Fork
就這樣,現在你已經 fork 了一份原來dzenbot/DZNEmptyDataSet
的倉庫。
????????當你 fork 一個項目時,可能是想在上游或原倉庫的基礎上做修改。如果是這種情況,那么定期的將你的 fork 和上游的倉庫進行同步將是一個好習慣。你可以通過在命令行上使用 Git 來進行同步。你可以通過剛剛將 dzenbot/DZNEmptyDataSet
倉庫的 fork 來練習設置上游的倉庫。
一、設置Git
如果你從來沒有設置過 Git,首先你需要設置 Git。同時不要忘記設置 Git 到 GitHub 的身份驗證。
二、在本地克隆你創建的fork
現在,你已經對 DZNEmptyDataSet
倉庫進行了 fork,但是在你的電腦上還沒有倉庫中的文件。現在,在你的電腦上克隆一份你 fork 的倉庫。
- 在 GitHub 上,跳轉到你 fork 的
DZNEmptyDataSet
的倉庫 - 在倉庫的名稱下,點擊 Clone or download
- 使用 HTTPs 方式下的克隆,點擊圖標來拷貝克隆倉庫的 URL。
- 打開終端
- 輸入
git clone
,然后粘貼你在第 3 步拷貝的 URL。將下面的YOUR-USERNAME
替換成你的 GitHub 的用戶名之后,看起來就一樣了:
git clone https://github.com/YOUR-USERNAME/DZNEmptyDataSet.git
- 按下 Enter,將會創建你本地的克隆
Cloning into 'DZNEmptyDataSet'...
remote: Enumerating objects: 5789, done.
remote: Total 5789 (delta 0), reused 0 (delta 0), pack-reused 5789
Receiving objects: 100% (5789/5789), 13.87 MiB | 74.00 KiB/s, done.
Resolving deltas: 100% (3135/3135), done.
現在,你有了一份對 DZNEmptyDataSet
倉庫 fork 后的本地拷貝。
三、配置 Git 來同步你 fork 的源 DZNEmptyDataSet 倉庫
當你為修改源倉庫而 fork 一個項目時,你可以通過配置 Git 來將上游倉庫或者源倉庫中修改的內容合并到你 fork 的倉庫的本地克隆上。
- 在 GitHub 上,跳轉到
wangxuewen/DZNEmptyDataSet
倉庫。 - 在倉庫的名稱下面,點擊 Clone or download。
- 使用 HTTPs 方式下的克隆,點擊圖標來拷貝克隆倉庫的 URL。
- 打開終端
- 改變路徑到你在第二步克隆的 fork 的項目文件
- 跳轉到你的 home 目錄,僅需要輸入 cd,而無需輸入更多文字。
- 輸入 ls 來列出當前目錄下的文件和文件夾。
- 輸入 cd your_listed_directory 進入列出的目錄當中的一個。
- 輸入 cd .. 跳轉到上一個目錄
- 輸入
git remote -v
后點擊 Enter,你就會看見你 fork 的倉庫配置的遠程倉庫。
wangxuewen@Davin-MacBookPro ~$ git remote -v ?master
origin https://github.com/wangxuewen/ZJYStarRateView.git (fetch)
origin https://github.com/wangxuewen/ZJYStarRateView.git (push)
- 輸入
git remote add upstream
,然后粘貼你在第二步拷貝的 URL,按 Enter。就像下面一樣:
git remote add upstream https://github.com/wangxuewen/DZNEmptyDataSet.git
- 為了驗證為你的 fork 設置的新的上游倉庫,再輸入一次
git remote -v
。你將會看見你的 fork 的 URL 作為origin
,源倉庫的 URL 作為upstream
。
wangxuewen@Davin-MacBookPro ~$ git remote -v ?master
origin https://github.com/wangxuewen/ZJYStarRateView.git (fetch)
origin https://github.com/wangxuewen/ZJYStarRateView.git (push)
upstream https://github.com/wangxuewen/DZNEmptyDataSet.git (fetch)
upstream https://github.com/wangxuewen/DZNEmptyDataSet.git (push)
- 將要修改的代碼push到新的倉庫中,有需要的可以添加新的tag。
- 修改pod文件中對應庫的依賴
pod 'DZNEmptyDataSet', :git => 'https://github.com/wangxuewen/DZNEmptyDataSet'