1. 程式人生 > >如何利用 Git 與 GitHub 進行多人協作開發

如何利用 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(整合)到一起。



作者:Little丶Jerry
連結:https://www.jianshu.com/p/8c69d1021d98
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。