原文同時刊登於:https://goo.gl/hrB1R2
[先說]
這純屬是我個人以及工作上開發專案的經驗,主要是希望透過分享推坑大家多多使用 git 提供的 remote 功能,如果你現在正在使用 git remote 或執行 git remote 後得到除了 origin 的字樣、不是使用 GitHub/Bitbucket/… 來放置你的專案、你是進階神等級 git 的使用者的話,那你可以直接跳過這篇,又或是閱讀後 補充 糾正 錯誤的使用觀念。
[從前]
我在 GitHub 上開發專案目前為止遇過以下兩種情境
情境一:我擁有專案的所有權(Owner/Member/Collaborator 的概念),不需要得到任何人的同意(或者是與所有開發者們達到共識),能夠新增刪除修改說有自己正在負責的功能分支(Branch)。
情境二:我沒有專案的所有權,但我有該專案的讀取權限(Read Only),要修改任何原專案的內容就得下載分支專案(Forked Repo)並提交 PR。這就是一般在 GitHub 上開發 Open Source 的流程。
一開始開發公司專案的時候,就直接採用情境一,反正公司專案開發的人不就我們這幾位,直接開發就好啦何必搞得那麼複雜制定一些規則,大家使用得開心最重要。過了幾個月後,偶然之下打了這句 git branch -a,我就開始捏上眼睛一個一個找到底我的分支叫哪個名字,大家取的名字風格都不太一樣讓我找得更加困難。
說到這裡,我們規定一個分支名字的規則吧,再來規定何時把分支移除等等的。可是說實在這沒有解決我們的問題,git branch -a 還是印出一大堆無理取鬧的名稱。再後來,公司導入 CI 環境整合測試,每動輒一個分支 CI 就會跑一遍,可想而知 CI 的負擔有多大。
那好,我們來採取第二個情境,你愛怎麼取分支的名稱也沒人可以拒絕,你胡亂 commit 也沒關係只要在最後送上 PR 的時候是乾乾淨淨文字敘述清楚就好了,這時候 CI 只需要跑一次檢查這一個 PR 即可。
流程大概是這樣,
在 GitHub UI 上點 forked 按鈕選擇自己的帳號、到自己的 repo 頁面取下 git 連結並 git clone 到自己的電腦、開了分支並 commit push、最後到 GitHub UI 上點選 Pull Request 送上自己的成果到原專案。
其實說到這裡我並還沒有 git remote 的概念,而是完全透過 GitHub UI 提供的功能來達成情境二,但有些問題一直困擾著我,
我需要同步原專案的 master 到我的分支、
我需要從原專案的 A 分支繼續開發並開新的分支 B、
我需要從同事 C 那取分支 D(C 分支尚未合併在原專案內)
我嘗試了很多方法有時成功有時失敗,直到我開始了解 git remote,才發現這才是真正使用情境二遠端多人合作模式下真正該有的樣子啊。
[一步一步使用 Git Remote]
git clone <你已經 forked 好的 git 專案>
git remote add <remote 名稱> <專案網址>
把 remote 專案 fetch 下來
git fetch <remote 名稱>
同步原專案的 master 到我的分支
git pull <remote 名稱> master
我需要從原專案的 A 分支繼續開發並開新的分支 B
git checkout -b B <remote 名稱>/A
檢查所有 remote 的專案使用名稱和網址
git remote -v
官方文件
https://git-scm.com/docs/git-remote
其實不多,就只有這樣而已…
[最後]
老實說,你用情景二一定會有機會搭配到 git remote 就是了
其實不管你用哪種方法都行,找到最適合自己或者團隊的開發模式即可。但如果有一個大家都能夠接受且解決現有問題的方法,把他學起來並且實用他,這是一種對於使用工具尊重的哲學概念,不好好地使用它就無法達到使用該工具的最佳效益。
使用 git GitHub 的方法千奇百種,這也是這麼多種中的其中一個小點點而已。我也想要聽聽大家到底是如何執行遠端多人合作模式的開發方式。
大家也來分享自己是如何執行遠端多人合作模式的開發方式吧~