**昨天還是執行好好的今天就不行了。
**被刪了。
突然出現了乙個奇怪的 bug,但是沒人知道怎麼回事。
如果你出現過上面的任何一種情況,那本篇文章就是為你準備的。
除了知道git add
,git commit
,git push
之外,git 中還需要其他重要的技術需要掌握。長遠來看對我們是有幫助的。這裡我將向你展示 git 的最佳實踐。
當有多個開發者同時涉及到乙個專案時那麼就非常有必要正確使用 git 工作流。
這裡我將介紹一種工作流,它在乙個多人大型專案中將非常有用。
突然有一天,你成為了乙個專案的技術 leader 並計畫做出下乙個 facebook。在這個專案中你有三個開發人員。
alice:乙個開發小白。
bob:擁有一年工作經驗,了解基本開發。
john:三年開發經驗,熟練開發技能。
你:該項目的技術負責人。
master 分支應該始終和生產環境保持一致。
由於 master 和生產**是一致的,所以沒有人包括技術負責人能在 master 上直接開發。
真正的開發**應當寫在其他分支上。
當專案開始時,第一件事情就是建立發布分支。發布分支是基於 master 分支建立而來。
所有與本專案相關的**都在發布分支中,這個分支也是乙個以release/
開頭的普通分支。
比如這次的發布分支名為release/fb
。
可能有多個專案都基於同乙份**執行,因此對於每乙個專案來說都需要建立乙個獨立的發布分支。假設現在還有乙個專案正在並行執行,那就得為這個專案建立乙個單獨的發布分支比如release/messenger
。
需要單獨的發布分支的原因是:多個並行專案是基於同乙份**執行的,但是專案之間不能有衝突。
對於應用中的每乙個功能都應該建立乙個獨立的功能分支,這會確保這些功能能被單獨構建。
功能分支也和其他分支一樣,只是以feature/
開頭。
現在作為技術 leader,你要求 alice 去做 facebook 的登入頁面。因此他建立了乙個新的功能分支。把他命名為feature/login
。alice 將會在這個分支上編寫所有的登入**。
這個功能分支通常是基於 release(發布) 分支 建立而來。
bob 的任務為建立新增好友頁面,因此他建立了乙個名為feature/friendrequest
的功能分支。
john 則被安排構建訊息流,因此建立了乙個feature/newsfeed
的功能分支。
所有的開發人員都在自己的分支上進行開發,目前為止都很正常。
現在當 alice 完成了他的登入開發,他需要將他的功能分支feature/login
傳送給 release(發布) 分支。這個過程是通過發起乙個pull request
完成的。
首先pull request
不能和git pull
搞混了。
開發人員不能直接向 release(發布) 分支推送**,技術 leader 需要在功能分支合併到 release(發布) 分支之前做好**審查。這也是通過pull request
完成的。
alice 能夠按照如下 github 方式提交pull request
。
在分支名字的旁邊有乙個 「new pull request」 按鈕,點選之後將會顯示如下介面:
點選之後 alice 需要為這個pull request
輸入名稱和描述,最後再點選 「create pull request」 按鈕。
同時 alice 需要為這個pull request
指定乙個 reviewer。作為技術 leader 的你被選為本次pull request
的 reviewer。
你完成**審查之後就需要把這個功能分支合併到 release(發布) 分支。
現在你已經把feature/login
分支合併到release/fb
,並且 alice 非常高興他的**被合併了。
bob 完成了他的編碼工作,同時向release/fb
分支發起了乙個pull request
。
因為發布分支已經合併了登入的**,這時**衝突發生了。解決衝突和合併**是 reviewer 的責任。在這樣的情況下,作為技術 leader 就需要解決衝突和合併**了。
現在 john 也已經完成了他的開發,同時也想把**合併到發布分支。但 john 非常擅長於解決**衝突。他將release/fb
上最新的**合併到他自己的功能分支feature/newsfeed
(通過 git pull 或 git merge 命令)。同時他解決了所有存在的衝突,現在feature/newsfeed
已經有了所有發布分支release/fb
的**。
最後 john 建立了乙個pull request
,由於 john 已經解決了所有問題,所以本次pull request
不會再有衝突了。
因此通常有兩種方式來解決**衝突:
一旦專案完成,發布分支的**需要合併回 master 分支,同時需要發布到生產環境。
因此生產環境中的**總是和 master 分支保持一致。同時對於今後的任何專案來說都是要確保 master **是最新的。
**:
如何高效的使用 Git
昨天還是執行好好的今天就不行了。被刪了。突然出現了乙個奇怪的 bug,但是沒人知道怎麼回事。如果你出現過上面的任何一種情況,那本篇文章就是為你準備的。除了知道 git add git commit git push 之外,git 中還需要其他重要的技術需要掌握。長遠來看對我們是有幫助的。這裡我將向你...
譯 如何高效的使用 Git
昨天還是執行好好的今天就不行了。被刪了。突然出現了乙個奇怪的 bug,但是沒人知道怎麼回事。如果你出現過上面的任何一種情況,那本篇文章就是為你準備的。除了知道git add,git commit,git push之外,git 中還需要其他重要的技術需要掌握。長遠來看對我們是有幫助的。這裡我將向你展示...
如何高效的使用STL
一些容器選用法則 1 如果程式要求隨機訪問元素,則應使用vector或deque容器 2 如果程式必須在容器的中間位置插入或刪除元素,則應採用list容器 3 如果程式不是在容器的中間位置,而是在容器首部或尾部插入或刪除元素,則應採用deque容器 4 如果只需要在讀取輸入時在容器的中間位置插入元素...