一些實用的GitHub模式

jopen 11年前發布 | 6K 次閱讀 Github

  我的本職工作和開源工作常涉及到使用 git 和 GitHub 。我發現有一些實用的模式我會固定使用。

  下文中我會把 pull 請求(pull request)簡寫成 PR。

  1. 剝離的 PR

  我什么時候用?

  • 工作在特性開發分支
  • 發現不好的代碼想要馬上就地修正,但是和我正在做的特性無關(例如一個小 bug,或者哪里不一致,或者有違背代碼規范)
  • </ul>

      我該做什么?

    • 暫停當前的進度(通過提交 commit 或者暫存 stash)
    • 檢出 master 分支
    • 新建分支
    • 修正代碼,提交
    • 切換回特性開發分支,繼續工作
    • 等特性開發分支合并(merge)到 master 分支后,再變基(rebase)到前面新建的分支上
    • </ul>

        這個既滿足想要快速修正無關問題的愿望,又能保持特征開發分支的清晰明了,讓評審變得更容易。

        2. 樂觀的分支

        我什么時候用?

      • 有一個暫不能合并(例如持續集成構建失敗,代碼評審者很忙等原因)的分支(分支A)
      • 我需要基于分支A的代碼做另一個改動
      • </ul>

          我該做什么?

        • 在分支A上創建一個新的分支(分支B)
        • 等分支A合并到 master 分支后,把分支B變基到 master 分支,并解決產生的任何沖突
        • 這樣在分支A上對 bug 的修正都變基到分支B上了
        • </ul>

            這種處理有沖突的風險,如果在分支A上做的改動特別大。但是這個樂觀的策略 95% 的情況都工作良好。

            3. 機智的 PR

            我什么時候用?

          • 假設我做的修改事實上不需要評審
          • 我還是需要我的隊友知道這件事
          • </ul>

              我該做什么?

            • 在分支上做修改
            • 報一個 PR
            • 自己迅速合并這個 PR
            • </ul>

                這個方法不會阻礙我的繼續,但是 GitHub 還是會通過郵件通知我的隊友這個 PR。因此大家覺得有異議也都可以評論這個修改。

                4. 偷偷摸摸的提交

                我什么時候用?

              • 代碼評審過了,并且合并到了 master
              • 我需要做一個小改動(例如復制改動,或者 bug 修正),但是沒必要通知別人
              • </ul>

                  我該做什么?

                • 只要把新的提交 push 到 master
                • </ul>

                    5. the roger roger 評論

                    我什么時候用?

                  • 從分支的代碼評審那里收到了可操作的回饋
                  • 已經基于回饋做好了相應的修改
                  • </ul>

                      我該做什么?

                      * 評論包含了該修改提交的引用的 PR

                      * GitHub 會聰明地在差異鏈接處增加引用的次數,這樣我的同事:

                      → 得到修改的郵件通知

                      → 簡單地點擊提交差異鏈接

                      → 知道他們可以繼續代碼評審了

                      6. 慢慢爬的提交

                      我什么時候用?

                    • 發現自己引入了一個小小的格式化的 bug(例如不必要的空格,文件最后沒有換行等),或者
                    • 某邏輯代碼修改實際上屬于前一個提交, 或者
                    • 代碼不可提交(例如某些測試未成功)但是我還是想要回退到這個狀態,這樣我可以安全地測試
                    • </ul>

                        我該怎么做?

                      • 前兩種情況,我會補救 amend 前一次提交
                      • 第三種情況,我有一個正在開發的(爬行的)提交,我漸進地進行補救(或者如果實驗失敗那就回退)直到我的代碼可以真正提交了。
                      • </ul>

                          7. 強制修改的分支

                          我什么時候用?

                        • 我需要補救一個遠端功能開發分支,例如提交信息里的說明非常糟糕
                        • </ul>

                            我該做什么?

                          • 在本地補救提交
                          • 把該功能開發分支強制推送到遠端的版本庫
                          • </ul>

                              強制推送到遠端分支應該是 git 的一個禁忌,但是我的經驗是這樣處理很少有問題(只要它是普通分支,不是 master 就行)。GitHub 能很好地處理強制推送到 PR 分支,例如不會丟失前一次的提交的評論。

                              8. 重新格式化剝離

                              我什么時候用?

                            • 我想修改同時格式化代碼
                            • </ul>

                                我該做什么?

                              • 在 master 上做一個僅包含重新格式化部分的提交
                              • 把我分支變基到 master
                              • </ul>

                                  這種方法,讓分支的差異在代碼評審者眼里變得更加清晰明了,因為它不包含格式化

                                  9. 原型 PR

                                  我什么時候用?

                                • 想要讓我的點子在寫大量實現代碼前得到大家的反饋
                                • </ul>

                                    我該做什么?

                                  • 在某個分支上做點整理
                                  • 為此報一個 PR,目的不是要發布最終代碼,而是作為大家討論的出發點
                                  • 當達成一致開始下一步時關閉該 PR(并且刪除分支)
                                  • 新建另外一個分支和 PR,這次好好寫代碼
                                  • </ul>

                                      我以前習慣于當代碼完成時應該報一個 PR。現在我真正領悟到了為什么“pull request 是一個開始討論的好辦法” —— GitHub 的圍繞 PR 的功能(例如內聯評論、回復、通知和比較差異)對于促進代碼和設計討論堪稱卓越,還可以防止開發者偏離正題太遠,跑到死胡同。

                                     本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
                                     轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
                                     本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!