如何利用 Git 與 GitHub 進行多人協作開發?

1. 首先 “Fork” 他人的 repository(代碼倉庫)

       “Fork” 的名詞是 “叉子” 的意思,不過這裏取的是動詞 “分叉,建一個分支” 的意思。進入你想參與合作開發的倉庫界面,點擊右上角的 “Fork” 圖標,此時你已經複製了一個副本在你的 GitHub 倉庫中了,或者是說一個新的代碼倉庫被創建了,可以打開你的 GitHub 主頁看一看。

       注意,這個遠程倉庫是屬於你自己的。這裏 “Fork” 不同於 “Clone”,“Clone” 是發生在你的本地機器中,相當於你複製了一個完全相同的副本在你的終端上,但該副本的遠程倉庫連接的仍然是原作者的倉庫,所以你並不是這個項目倉庫的擁有者,沒有更新它的權限。

       因此,“Fork” 正是我們所需要的。

        點擊之後可以看到,自己帳號內有一個新的代碼倉庫被創建了。

      然後將這個代碼倉庫 “Clone”(克隆)到你的本地機器中,可以使用命令行或者 IDE(比如 Intellij IDEA)的 VCS 功能來實現。“Clone” 成功之後你就可以自主修改裏面的內容,然後 “Push” 到遠程倉庫中,注意,這是你自己的遠程倉庫。但是不使用 “Fork”,而是直接 “Clone”(克隆)原作者的倉庫的話,你會得到一個 “fatal: unable to access” 的提示,無法訪問。

       在這一環節,所有的修改只發生在你的遠程倉庫中,原作者的代碼倉庫內容是不會發生任何改變的。這裏最需要理解的是,“Clone” 下來的本地倉庫連接的是你 GitHub 上的遠程倉庫。

2. 開始參與開發前的一些準備

(1)在你做任何開發前,最好先詳細閱讀該項目的 CONTRIBUTING.md 文件

(2)瀏覽該項目的 Issues(問題)公告,甚至可以自己創建一個 Issue

(3)一般不要將自己做的修改提交到 master branch(主分支)上,而是應該提交到某個明確的 topic branch(主題分支,解決某個bug或者添加某一功能的分支)上。注意,我們應該自己建一個 topic branch,然後在上面作修改,而不在 master 分支直接修改,因爲這樣更具有直觀性。

(4)最好每次只提交較小的修改,並寫好清晰明確的 Commit Messages(提交說明).

(5)如果有需要,請更新 README 文件

3. 創建一個 Pull Request

       按自己的需要去修改項目內容,然後將所做的修改提交(Add+Commit)到自己的代碼倉庫,接着到倉庫頁面,點擊 New pull request 按鈕。

       點擊去之後可以看到,左邊紅框是你 “Fork” 的原項目倉庫和分支,右邊紅框是你當前選擇的項目倉庫和分支。其實這裏就是將兩個紅框內的內容作對比,並把不相同的地方顯示出來。因爲此時兩個倉庫和分支的內容是完全一樣的,所有沒有什麼信息顯示出來(我沒有做修改)。不太理解的話,可以自由去嘗試四個下拉框裏不同的選項,很快你就會知道是怎麼回事了。

       我這裏任意選擇了原項目的另一個分支,因爲這兩個分支不完全相同,所以可以看到出現了一個 “Create pull request” 的按鈕,點擊它。

       填寫你的請求信息,說明你做了些什麼之類的。這個請求是發給該項目的維護者(擁有者)的,完成之後點擊 “Create pull request” 按鈕即可。

       之後項目的維護者會受到你的請求,只要他/她通過了你的請求,你所做的修改就會被整合到原項目的倉庫裏了。

左邊是你的本地倉庫,中間是你在 GitHub 上 Fork 建立的倉庫,右邊是項目的原倉庫。

4. 與原倉庫保持同步更新

       說到合作開發就會有一個問題,如何與他人的代碼保持同步?在自己做開發的過程中,難免會遇到你 “Fork” 的項目已經有了新的更新,這時當然是希望自己倉庫中的代碼也能同步進行更新。可是,你本地倉庫所連接的遠程倉庫的是你自己的 GitHub 倉庫,而不是原作者的倉庫。解決方法其實很簡單,爲你的本地倉庫再添加一個遠程倉庫源。

查看當前項目所連接的遠程倉庫

打開終端,進入到項目的 Git 倉庫所在目錄,一般就是項目目錄,輸入:

git remote -v

      可以看到目前只連接了我自己的遠程倉庫。

添加原作者的遠程倉庫連接

git remote add upstream https://github.com/GoogleChrome/lighthouse.git

(注意替換原倉庫的 http 鏈接)

      如圖,現在已經成功添加原項目的遠程倉庫了。

還差一點就大功告成了

(1)從原倉庫獲取最新版本到本地

git fetch upstream master

(2)保證當前位於 master 分支上

git checkout master

(3)將最新版本整合到本地 master 分支上

git merge upstream/master

(4)將更新發送到自己的 GitHub 倉庫裏

git push origin master

(1)(2)(3)步可以用

git pull upstream master

這條命令替代,可以這樣不太安全,因爲你 fetch(獲取)之後可以通過

gitlog--oneline --graph --decorate --all

來查看更新的情況,再決定是否 merge(整合)到一起。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章