為開源提 PR

2022-09-12 21:01:30

PR 可讓你在 GitHub 上向他人告知你已經推播到儲存庫中分支的更改。 在 PR 開啟後,你可以與共同作業者討論並審查潛在更改,在更改合併到基本分支之前新增跟進提交。

為什麼 PR

使用 PR 的主要原因是促進有益的程式碼審查過程。如果允許團隊中的每個人都在不收集反饋和確保質量的情況下編輯程式碼,則專案很快就會變得一團糟並存在許多問題。程式碼審查被證明有助於將專案的標準保持在更高的水平,並減少合併到專案中的問題數量。

程式碼審查

  • 程式碼

在合併更改之前檢查更改的過程稱為 程式碼檢查。建議的更改可以像修復一個小的拼寫錯誤一樣簡單,也可以像向專案新增數百個具有重大更改的檔案一樣複雜。當發起拉取請求時,專案的維護者能夠檢視建議的更改,提出編輯建議,並批准要合併的建議更改。

  • 審查人

拉取請求的作者是對所提議的專案進行更改的一個或多個人。審稿人通常是與作者的隊友或合作者,負責審校建議的更改。有許多方法可以決定誰應該檢視因專案而異的更改。一些較大的專案有有限數量的「維護者」,他們是一組定義的審閱者,允許批准將更改合併到專案中。其他專案允許除作者以外的任何人批准要合併的更改。

PR 實錄

選取的專案是部落格園主題 Blogure

如果希望為專案做貢獻, 首先要檢查目前專案中有那些懸而未決的問題, 有哪些希望新人蔘與. 主要的渠道就是 issues.

issues

want helped 表示是一個需要大家幫助的 issue, 點進入可以看到具體的專案描述, 如果有興趣就可以將 Assignees 選擇自己.

如果你有其他好的想法, 也可以通過 New issue, 發起討論.

回到當前 issue, 嘗試去理解下需求內容, 如果描述不夠清楚, 可以在評論區討論. 這個需求說了, 原來主題切換到暗黑模式後, 如果此時重新整理, 就會失效, 希望將狀態存入到 localStorage 中, 以便使用者下次可以儲存暗黑模式.

把專案 fork 到自己的倉庫中, 就可以開始這次旅程了.

coding

通過描述, 完成了下面的程式碼, 通過 diff 來看到這次程式碼的變化.

$ git diff page_begin/footer.html
diff --git a/page_begin/footer.html b/page_begin/footer.html
index d31e799..9043f31 100644
--- a/page_begin/footer.html
+++ b/page_begin/footer.html
@@ -4,7 +4,7 @@
         <a href="https://github.com/xnuc/cnblogs-theme-blogure">source</a></small>
     <label for="switch">
         <input type="checkbox" style="position:fixed;bottom:var(--spacing);left:var(--spacing);" id="dark-switch"
-            role="switch" @click="darkSwitcher($el)">
+            role="switch" @click="darkSwitcher($el)" :checked="localStorage.getItem('data-theme') === 'dark' ?? false">
     </label>
     <template v-if="vm.main.layout === 'post'">
         <label for="switch">
@@ -23,12 +23,20 @@
             $template: '#blogure-footer',
         }
     }
-    
+
     function darkSwitcher(dom) {
+        darkSwitcherWithStorage(dom)
         if (dom.checked) document.querySelector('html').setAttribute('data-theme', 'dark')
         if (!dom.checked) document.querySelector('html').setAttribute('data-theme', 'light')
     }
 
+    function darkSwitcherWithStorage(dom) {
+        if (!window.localStorage) return
+        if (dom.checked) localStorage.setItem('data-theme', 'dark')
+        if (!dom.checked) localStorage.setItem('data-theme', 'light')
+    }
+    if (window.localStorage) document.querySelector('html').setAttribute('data-theme', localStorage.getItem('data-theme'))
+
     function tocSwitcher(dom) {
         if (dom.checked) {
             document.querySelector('#toc').style.transform = 'translate(0)'

確認無誤後, 可以提交到自己的倉庫, 如果有提交規範, 注意提交規範.

git add .
git commit -m "feat: 暗黑模式存入localStorage #40"
git push

PR

提交後, 在 fork 倉庫可以發起提交了.

有的專案會有嚴格的分支保護, 這個專案提示必須通過至少一個專案成員的程式碼審查. 右側可以新增程式碼審查人, 等待審查結果.

審查過程中, 可能會有成員提出指導性建議. 如果你認為合理, 可以修改. 或者不合理, 在他的建議下面繼續討論.

merge

檢查通過後, 可以 merge 到 master.

重新回到 issue 區, 將提交繫結到這次 issue 上, 關閉這個 issue.

看到 Closed, 這次簡單的 PR 就完成了.