日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

golang中文文档_【译】Go 语言源码贡献官方指导文档

發布時間:2023/12/10 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 golang中文文档_【译】Go 语言源码贡献官方指导文档 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

以前給 Go 語言項目源碼提交過一些 commits,期間閱讀他們的官方指導文檔的時候覺得這篇指導文檔可以作為絕佳的關于大型軟件項目的規范管理的參考,因為最近又提交了幾個 commits,就又把這篇文檔再看了一遍,有感于 Go 團隊在項目管理和工程實踐上的一些寶貴經驗,就把文檔翻譯成了中文;一來為了更加深入地理解 Go 語言團隊的項目工程最佳實踐,二來則是為了給其他有意給 Go 語言源碼提交貢獻的開發者提供一點參考。

Go 語言項目歡迎所有代碼貢獻者。

這是一份指導你完成向 Go 語言項目貢獻代碼整個流程的文檔,會略微跟其他開源項目所使用的指導文檔有所不同。我們假設閱讀者已經對 Git 和 Go 有基本的理解以及具備相關的基礎知識。

除了這里所介紹的信息,Go 語言社區也維護了一份關于代碼評審的 wiki 頁面。在你學習 review 的過程中,歡迎隨時給這份 wiki 貢獻、補充新內容。

請注意,gccgo前端的文檔在另一處;看這里:Contributing to gccgo。

成為一個代碼貢獻者

概述

第一步需要注冊成為一個 Go contributor 以及配置你的環境。這里有一份包含了所需步驟的清單:

  • 步驟 0: 準備好一個你將用來給 Go 語言貢獻代碼的 Google 賬號。在后面所有的步驟中都要使用這個賬號,還有確保你的git已經正確配置了這個賬號的郵箱地址,以便后續提交 commits。
  • 步驟 1: 簽署以及提交一個 CLA(貢獻者證書協議)。
  • 步驟 2: 給 Go Git 倉庫配置好權限憑證。訪問 go.googlesource.com,點擊右上角的齒輪圖標,接著點擊 "Obtain password",然后跟著指引操作即可。
  • 步驟 3: 在這個頁面注冊一個 Gerrit 賬號,它是 Go 語言團隊使用的代碼評審工具。CLA 的申請和 Gerrit 的注冊只需要在你的賬號上做一次就可以了
  • 步驟 4: 運行go get -u golang.org/x/review/git-codereview命令安裝 git-codereview 工具。

如果你圖省事的話,可以直接用自動化工具幫你做完上面的全部步驟,只需運行:

$ go get -u golang.org/x/tools/cmd/go-contrib-init
$ cd /code/to/edit
$ go-contrib-init

這個章節的后面部分將會更加詳盡地闡述上面的每一個步驟。如果你已經完成上面的所有步驟(不管是手動還是通過自動化工具),可以直接跳到貢獻代碼之前部分。

步驟 0: 選擇一個 Google 賬號

每一個提交到 Go 語言的代碼貢獻都是通過一個綁定了特定郵箱地址的 Google 賬號來完成的。請確保你在整個流程中自始至終使用的都是同一個賬號,當然,后續你提交的所有代碼貢獻也是如此。你可能需要想好使用哪一種郵箱,個人的還是企業的。郵箱類型的選擇將決定誰擁有你編寫和提交的代碼的版權。在決定使用哪個賬戶之前,你大概要和你的雇主商議一下。

Google 賬號可以是 Gmail 郵箱賬號、G Suite 組織賬號,或者是那些綁定了外部郵箱的賬號。例如,如果你想要使用一個已存在且并不屬于 G Suite 的企業郵箱,你可以創建一個綁定了外部郵箱的 Google 賬號。

你還需要確保你的 Git 工具已經正確配置好你之前選定的郵箱地址,用來提交代碼。你可以通過 Git 命令來進行全局配置(所有項目都將默認使用這個配置)或者只進行本地配置(只指定某個特定的項目使用)。可以通過以下的命令來檢查當前的配置情況:

$ git config --global user.email # check current global config
$ git config user.email # check current local config

修改配置好的郵箱地址:

$ git config --global user.email name@example.com # change global config
$ git config user.email name@example.com # change local config

步驟 1: 貢獻者證書協議

在你提交第一個代碼變更到 Go 語言項目之前,你必須先簽署下面兩種證書協議的其中之一。最后的代碼版權歸屬于誰,將決定你應該簽署哪一種協議。

  • 如果你個人是版權持有方,你就需要同意 individual contributor license agreement 并簽署,這個步驟可以在線上完成。
  • 如果企業/組織是版權持有方,那么企業/組織就需要同意 corporate contributor license agreement 并簽署。

你可以在 Google Developers Contributor License Agreements 網站上檢查當前已簽署的協議以及再簽署新的協議。如果你代碼的版權持有方之前已經在其他的 Google 開源項目上簽署過這些協議了,那么就不需要再重復簽署了。

如果你代碼的版權持有方更改了--例如,如果你開始代表新的公司來貢獻代碼--請發送郵件到 golang-dev 郵件組。這樣我們可以知悉情況,接著準備一份新的協議文件以及更新作者文件。

步驟 2: 配置 git 認證信息

Go 語言的主倉庫位于 go.googlesource.com,這是一個 Google 自建的 Git 服務器。Web 服務器上的認證信息是通過你的 Google 帳戶生成的,不過你還是需要在你的個人電腦上安裝配置 git 來訪問它。按照以下的步驟進行:

  • 訪問 go.googlesource.com 然后點擊頁面右上角菜單條上的 "Generate Password" 按鈕。接著你會被重定向到 accounts.google.com 去登陸。
  • 登陸之后,你會被引導到一個標題為 "Configure Git" 的網頁。這個網頁包含了一段個性化的腳本代碼,運行這個腳本之后會自動生成身份認證的密鑰并配置到 Git 里面去。這個密鑰是和另一個在遠端 Server 生成并存儲的密鑰成對的,類似于 SSH 密鑰對的工作原理。
  • 復制這段腳本并在你的個人電腦上的終端運行一下,你的密鑰認證 token 就會被保存到一個 .gitcookies 的文件里。如果你使用的是 Windows 電腦,那你應該復制并運行黃色方格里的腳本,而不是下面那個通用的腳本。
  • 步驟 3: 創建一個 Gerrit 賬號

    Gerrit 是 Go 語言團隊所使用的一個開源工具,用來進行討論和代碼評審。

    要注冊一個你自己的 Gerrit 賬號,訪問 go-review.googlesource.com/login/ 然后使用你上面的 Google 賬號登陸一次,然后就自動注冊成功了。

    步驟 4: 安裝 git-codereview 命令行工具

    無論是誰,提交到 Go 語言源碼的代碼變更在被接受合并之前,必須要經過代碼評審。Go 官方提供了一個叫 git-codereview 的定制化 git 命令行工具,它可以簡化與 Gerrit 的交互流程。

    運行下面的命令安裝 git-codereview 命令行工具:

    $ go get -u golang.org/x/review/git-codereview

    確保 git-codereview 被正確安裝到你的終端路徑里,這樣 git 命令才可以找到它,檢查一下:

    git codereview help

    正確打印出幫助信息,而且沒有任何錯誤。如果發現有錯誤,確保環境變量 $PATH里有$GOPATH/bin這個值。

    在 Windows 系統上,當使用 git-bash 的時候你必須確保 git-codereview.exe 已經存在于你的 git exec-path 上了。可以運行 git --exec-path 來找到正確的位置然后創建一個軟鏈接指向它或者直接從$GOPATH/bin目錄下拷貝這個可執行文件到 exec-path。

    貢獻代碼之前

    Go 語言項目歡迎提交代碼補丁,但是為了確保很好地進行協調,你應該在開始提交重大代碼變更之前進行必要的討論。我們建議你把自己的意圖或問題要不先提交到一個新的 Github issue,要不找到一個和你的問題相同或類似的 issue 跟進查看。

    檢查 issue 列表

    不管你是已經明確了要提交什么代碼,還是你正在搜尋一個想法,你都應該先到 issue 列表 搜索一下。所有 Issues ?被已經分門別類以及被用來管理 Go 開發的工作流。

    大多數 issues 會被標記上以下眾多的工作流標簽中的其中一個:

    • NeedsInvestigation: 該 issue 并不能被完全清晰地解讀,需要更多的分析去找到問題的根源
    • NeedsDecision: 該 issue 已經在相當程度上被解讀,但是 Go 團隊還沒有得出一個最好的方法去解決它。最好等 Go 團隊得出了最終的結論之后才開始寫代碼修復它。如果你對解決這個 issue 感興趣,而且這個 issue 已經過了很久都沒得出最終結論,隨時可以在該 issue 下面發表評論去"催促"維護者。
    • NeedsFix: 該 issue 可以被完全清晰地解讀而且可以開始寫代碼修復它。

    你可以使用 Github 的搜索功能去搜尋一個 issue 然后搭把手幫忙解決它。例子:

    • Issues that need investigation: is:issue is:open label:NeedsInvestigation
    • Issues that need a fix: is:issue is:open label:NeedsFix
    • Issues that need a fix and have a CL: is:issue is:open label:NeedsFix "golang.org/cl"
    • Issues that need a fix and do not have a CL: is:issue is:open label:NeedsFix NOT "golang.org/cl"

    新開一個關于任何新問題的 issue

    除了一些很瑣碎的變更之外,所有的代碼貢獻都應該關聯到一個已有的 issue。你隨時可以新開一個 issue 來討論你的相關計劃。這個流程可以讓所有人都能夠參與驗證代碼的設計,同時幫忙減少一些重復的工作,以及確保這個想法是符合這門語言和相關工具的目標和理念的。還有就是能在真正開始寫代碼之前就檢查這個代碼設計是否合理;代碼評審工具不是用來討論高層次問題的。

    在規劃你的代碼變更工作的時候,請知悉 Go 語言項目遵循的是 6 個月開發周期。在每一個 6 個月周期的后半部分是長達 3 個月的新功能特性凍結期:這期間我們只接受 bug 修復和文檔更新相關的變更。在凍結期內還是可以提交新的變更的,但是這些變更的代碼在凍結期結束之前不會被合并入主分支。

    那些針對語言、標準庫或者工具的重大變更必須經過變更提議流程才能被接受。

    敏感性的安全相關的 issues 只能上報到 security@golang.org 郵箱!

    通過 Github 提交一個變更

    我們鼓勵那些初次提交代碼并且已經相當熟悉 GitHub 工作流的貢獻者通過標準的 Github 工作流給 Go 提交代碼。盡管 Go 的維護者們是使用 Gerrit 來進行代碼評審,但是不用擔心,會有一個叫 Gopherbot 的機器人專門來做把 Github PR 同步到 Gerrit 上的工作。

    就像你通常情況下那樣新建一個 pull request,Gopherbot 會創建一個對應的 Gerrit 變更頁面然后把指向該 Gerrit 變更頁面的鏈接發布在 GitHub PR 里面;所有 Github PR 的更新都會被同步更新到 Gerrit 里。當有人在 Gerrit 的代碼變更頁面里發表評論的時候,這些評論也會被同步更新回 Github PR 里,因此 PR owner 將會收到一個通知。

    需要謹記于心的東西:

    • 如果要在 Github PR 里進行代碼更新的話,只需要把你最新的代碼推送到對應的分支;你可以添加更多的 commits、或者做 rebase 和 force-push 操作(這些方式都是可以接受的)。
    • 一旦 Github PR 被接受,所有的 commits 將會被合并成一條,而且最終的 commit 信息將由 PR 的標題和描述聯結而成。那些單獨的 commit 描述將會被丟棄掉。查看寫好 Commits 信息獲取更多的建議。
    • Gopherbot 無法逐字逐句地把代碼評審的信息同步回 Github: 僅僅是(未經格式化的)全部評論的內容會被同步過去。請記住,你總是可以訪問 Gerrit 去查看更細粒度和格式化的內容。

    通過 Gerrit 提交一個變更

    一般來說,我們基本不可能在 Gerrit 和 Github 之前完整地同步所有信息,至少在現階段來說是這樣,所以我們推薦你去學習一下 Gerrit。這個不同于 Github 卻同樣強大的工具,而且熟悉它能幫助你更好地理解我們的工作流。

    概述

    這是一個關于整個流程的概述:

    • 步驟 1: 從go.googlesource.com克隆 Go 的源碼下來,然后通過編譯和測試一次確保這份源碼是完整和穩定的:

      $ git clone https://go.googlesource.com/go
      $ cd go/src
      $ ./all.bash # compile and test
    • 步驟 2: 從 master 分支上拉出一條新分支并在這個分支上準備好你的代碼變更。使用 git codereview change來提交代碼變更;這將會在這個分支上新建或者 amend 一條單獨的 commit。

      $ git checkout -b mybranch
      $ [edit files...]
      $ git add [files...]
      $ git codereview change # create commit in the branch
      $ [edit again...]
      $ git add [files...]
      $ git codereview change # amend the existing commit with new changes
      $ [etc.]
    • 步驟 3: 重跑 all.bash 腳本,測試你的代碼變更。

      $ ./all.bash # recompile and test
    • 步驟 4: 使用git codereview mail命令發送你的代碼變更到 Gerrit 進行代碼評審(這個過程并不使用 e-mail,請忽略這個奇葩名字)。

      $ git codereview mail # send changes to Gerrit
    • 步驟 5: 經過一輪代碼評審之后,把你新的代碼變更依附在同一個單獨 commit 上然后再次使用 mail 命令發送到 Gerrit:

      $ [edit files...]
      $ git add [files...]
      $ git codereview change # update same commit
      $ git codereview mail # send to Gerrit again

    這個章節剩下的內容將會把上面的步驟進行詳細的講解。

    步驟 1: 克隆 Go 語言的源碼

    除了你近期安裝的 Go 版本,你還需要有一份從正確的遠程倉庫克隆下來的本地拷貝。你可以克隆 Go 語言源碼到你的本地文件系統上的任意路徑下,除了你的GOPATH環境變量對應的目錄。從go.googlesource.com克隆下來 (不是從 Github):

    $ git clone https://go.googlesource.com/go
    $ cd go

    步驟 2: 在新分支上準備好代碼變更

    每一次代碼變更都必須在一條從 master 拉出來的獨立分支上開發。你可以使用正常的 git 命令來新建一條分支然后把代碼變更添加到暫存區:

    $ git checkout -b mybranch
    $ [edit files...]
    $ git add [files...]

    使用 git codereview change而不是git commit命令來提交變更。

    $ git codereview change
    (open $EDITOR)

    你可以像往常一樣在你最喜歡的編輯器里編輯 commit 的描述信息。git codereview change命令會自動在靠近底部的地方添加一個唯一的 Change-Id 行。那一行是被 Gerrit 用來匹配歸屬于同一個變更的多次連續的上傳。不要編輯或者是刪除這一行。一個典型的 Change-Id 一般長的像下面這樣:

    Change-Id: I2fbdbffb3aab626c4b6f56348861b7909e3e8990

    這個工具還會檢查你是否有使用 go fmt命令對代碼進行格式化,以及你的 commit 信息是否遵循建議的格式。

    如果你需要再次編輯這些文件,你可以把新的代碼變更暫存到暫存區然后重跑git codereview change: 后續每一次運行都會 amend 到現存的上一條 commit 上,同時保留同一個 Change-Id。

    確保在每一條分支上都只存在一個單獨的 commit,如果你不小心添加了多條 commits,你可以使用git rebase來把它們合并成一條。

    步驟 3: 測試你的代碼變更

    此時,你已經寫好并測試好你的代碼了,但是在提交你的代碼去進行代碼評審之前,你還需要對整個目錄樹運行所有的測試來確保你的代碼變更沒有對其他的包或者程序造成影響/破壞:

    $ cd go/src
    $ ./all.bash

    (如果是在 Windows 下構建,使用all.bat;還需要在保存 Go 語言源碼樹的目錄下為引導編譯器設置環境變量 GOROOT_BOOTSTRAP。)

    在運行和打印測試輸出一段時間后,這個命令在結束前打印的最后一行應該是:

    ALL TESTS PASSED

    你可以使用 make.bash 而不是 all.bash 來構建編譯器以及標準庫而不用運行整個測試套件。一旦 go 工具構建完成,一個 bin/go 可執行程序會被安裝在你前面克隆下來的 Go 語言源碼的根目錄下,然后你可以在那個目錄下直接運行那個程序。可以查看快速測試你的代碼變更這個章節。

    步驟 4: 提交代碼變更進行代碼評審

    一旦代碼變更準備好了而且通過完整的測試了,就可以發送代碼變更去進行代碼評審了。這個步驟可以通過 mail 子命令完成,當然它并沒有發送任何郵件;他只是把代碼變更發送到 Gerrit 上面去了:

    git codereview mail

    Gerrit 會給你的變更分配一個數字和 URL,通過 git codereview mail 打印出來,類似于下面的:

    remote: New Changes:
    remote: https://go-review.googlesource.com/99999 math: improved Sin, Cos and Tan precision for very large arguments

    如果有錯誤,查看?mail 命令錯誤大全和故障排除。

    如果你的代碼變更關聯到一個現存的 Github issue 而且你也已經遵循了建議的 commit 信息格式,機器人將會在幾分鐘更新那個 issue:在評論區添加 Gerrit 變更頁面的鏈接。

    步驟 5: 代碼評審之后修正變更

    Go 語言的維護者們會在 Gerrit 上對你的代碼進行 review,然后你會收到一堆郵件通知。你可以在 Gerrit 上查看詳情以及發表評論,如果你更傾向于直接使用郵件回復,也沒問題。

    如果你需要在一輪代碼評審之后更新代碼,直接在你之前創建的同一條分支上編輯代碼文件,接著添加這些文件進 Git 暫存區,最后通過 git codereview change amend 到上一條 commit:

    $ git codereview change # amend current commit
    (open $EDITOR)
    $ git codereview mail # send new changes to Gerrit

    要是你不需要更改 commit 描述信息,可以直接在編輯器保存然后退出。記得不要去碰那一行特殊的 Change-Id。

    再次確保你在每一條分支上只保留了一個單獨的 commit,如果你不小心添加了多條 commits,你可以使用git rebase來把它們合并成一條。

    良好的 commit 信息

    Go 語言的 commit 信息遵循一系列特定的慣例,我們將在這一章節討論。

    這是一個良好的 commit 信息的例子:

    math: improve Sin, Cos and Tan precision for very large arguments

    The existing implementation has poor numerical properties for
    large arguments, so use the McGillicutty algorithm to improve
    accuracy above 1e10.

    The algorithm is described at https://wikipedia.org/wiki/McGillicutty_Algorithm

    Fixes #159

    首行

    變更信息的第一行照慣例一般是一短行關于代碼變更的概述,前綴是此次代碼變更影響的主要的包名。

    作為經驗之談,這一行是作為 "此次變更對 Go 的 _________ 部分進行了改動" 這一個句子的補全信息,也就是說這一行并不是一個完整的句子,因此并不需要首字母大寫,僅僅只是對于代碼變更的歸納總結。

    緊隨第一行之后的是一個空行。

    主干內容

    描述信息中剩下的內容會進行詳盡地闡述以及會提供關于此次變更的上下文信息,而且還要解釋這個變更具體做了什么。請用完整的句子以及正確的標點符號來表達,就像你在 Go 代碼里的注釋那樣。不要使用 HTML、Markdown 或者任何其他的標記語言。

    添加相關的信息,比如,如果是性能相關的改動就需要添加對應的壓測數據。照慣例會使用 benchstat 工具來對壓測數據進行格式化處理,以便寫入變更信息里。

    引用 issues

    接下來那個特殊的表示法 "Fixes #12345" 把代碼變更關聯到了 Go issue tracker 列表里的 issue 12345。當這個代碼變更最終實施之后 (也就是合入主干),issue tracker 將會自動標記那個 issue 為"已解決"并關閉它。

    如果這個代碼變更只是部分解決了這個 issue 的話,請使用 "Updates #12345",這樣的話就會在那個 issue 的評論區里留下一個評論把它鏈接回 Gerrit 上的變更頁面,但是在該代碼變更被實施之后并不會關閉掉 issue。

    如果你是針對一個子倉庫發送的代碼變更,你必須使用 Github 支持的完全形式的語法來確保這個代碼變更是鏈接到主倉庫的 issue 上去的,而非子倉庫。主倉庫的 issue tracker 會追蹤所有的 issues,正確的格式是 "Fixes golang/go#159"。

    代碼評審流程

    這個章節是對代碼評審流程的詳細介紹以及如何在一個變更被發送之后處理反饋。

    常見的新手錯誤

    當一個變更被發送到 Gerrit 之后,通常來說它會在幾天內被分門別類。一個維護者將會查看并提供一些初始的評審,對于初次提交代碼貢獻者來說,這些評審通常集中在基本的修飾和常見的錯誤上。

    內容包括諸如:

    • Commit 信息沒有遵循建議的格式
    • 沒有鏈接到對應的 Github issue。大部分代碼變更需要鏈接到對應的 Github issue,說明這次變更修復的 bug 或者實現的功能特性,而且在開始這個變更之前,issue 里應該已經達成了一致的意見。Gerrit 評審不會討論代碼變更的價值,僅僅是討論它的具體實現。
    • 變更如果是在開發周期的凍結階段被發送到 Gerrit 上的,也就是說彼時 Go 代碼樹是不接受一般的變更的,這種情況下,一個維護者可能會在評審代碼時留下一行這樣的評論:R=go.1.12,意思是這個代碼變更將會在下一個開發窗口期打開 Go 代碼樹的時候再進行評審。如果你知道那不是這個代碼變更應該被評審的正確的時間范圍,你可以自己加上這樣的評論:R=go1.XX 來更正。

    Trybots

    在第一次看過你的代碼變更之后,維護者會啟動一些 trybots,這是一個會在不同的 CPU 架構的機器上運行完整測試套件的服務器集群。大部分 trybots 會在幾分鐘內執行完成,之后會有一個可以查看具體結果的鏈接出現在 Gerrit 變更頁面上。

    如果 trybot 最后執行失敗了,點擊鏈接然后查看完整的日志,看看是在哪個平臺上測試失敗了。盡量嘗試去弄明白失敗的原因,然后更新你的代碼去修復它,最后重新上傳你的新代碼。維護者會重新啟動一個新的 trybot 再跑一遍,看看問題是不是已經解決了。

    有時候,Go 代碼樹會在某些平臺上有長達數小時的執行失敗;如果 trybot 上報的失敗的問題看起來和你的這次代碼變更無關的話,到構建面板上去查看近期內的其他 commits 在相同的平臺上是不是有出現過這種一樣的失敗。如果有的話,你就在 Gerrit 變更頁面的評論區里說明一下這個失敗和你的代碼變更無關,以此讓維護者知悉這種情況。

    評審

    Go 語言社區非常重視全面的評審。你要把每一條評審的評論的當成一張罰單:你必須通過某種方式把它"關掉",或者是你把評論里建議的修改實現一下,或者是你說服維護者那部分不需要修改。

    在你更新了你的代碼之后,過一遍評審頁面的所有評論,確保你已經全部回復了。你可以點擊 "Done" 按鈕回復,這表示你已經實現了評審人建議的修改,否則的話,點擊 "Reply" 按鈕然后解釋一下你為什么還沒修改、或者是你已經做了其他地方的修改并覆蓋了這一部分。

    一般來說,代碼評審里會經歷多輪的評審,期間會有一個或者多個評審人不斷地發表新的代碼審查評論然后等待提交者修改更新代碼之后繼續評審,這是很正常的。甚至一些經驗老到的代碼貢獻者也會經歷這種循環,所以不要因此而被打擊到。

    投票規則

    在評審人們差不多要得出結論之時,他們會對你的此次代碼變更進行"投票"。Gerrit 的投票系統包含了一個在[-2, 2]區間的整數:

    • +2: 同意此次代碼變更被合入到主分支。只有 Go 語言的維護者們才有權限投 +2 的票。
    • +1: 這個代碼變更看起來沒什么問題,不過要么是因為評審人還要求對代碼做一些小的改動、要么是因為該評審人不是一個維護者而無法直接批準這個變更,但是該評審人支持批準這個變更。
    • -1: 這個代碼變更并不是很合理但可能有機會做進一步的修改。如果你得到了一個 -1 票,那一定會有一個明確的解釋告訴你為什么。
    • -2: 一個維護者否決了這個代碼變更并且不同意合入主干。同樣的,會有一個明確的解釋來說明原因。

    提交一個核準的變更

    在一個代碼變更被投了一個 +2 票之后,投下這票的核準人將會使用 Gerrit 的用戶界面來將代碼合并入主干,這個操作被稱為"提交變更"。

    之所以把核準和提交拆分成兩步,是因為有些時候維護者們可能并不想把剛剛批準的代碼變更立刻合入主干,比如,彼時可能正處于 Go 代碼樹的暫時凍結期。

    提交一個變更將會把代碼合入主倉庫,代碼變更的描述信息里會包含一個指向對應代碼評審頁面的鏈接,而具體代碼評審頁面處也會更新一個鏈接指向倉庫里的此次代碼變更 commit。把代碼變更合入主干時使用的是 Git 的 "Cherry Pick" 命令,因此在主倉庫里的關于此次代碼變更的 commit 哈希 ID 會被這個提交操作更改。

    如果你的變更已經被批準了好幾天了,但是一直沒有被提交到主倉庫,你可以在 Gerrit 寫個評論要求合入。

    更多信息

    除了這里的信息,Go 語言社區還維護了一個代碼評審的 wiki 頁面。隨時歡迎你在學習相關的評審流程之時為這個頁面貢獻、補充新內容。

    其他主題

    這個章節收集了一些除了 issue/edit/code review/submit 流程之外的注解信息。

    版權標頭

    Go 語言倉庫里的文件不會保存一份作者列表,既是為了避免雜亂也是為了避免需要實時更新這份列表。相反的,你的名字將會出現在變更日志和貢獻者文件里,也可能會出現在作者文件里。這些文件是定期從 commit 日志上自動生成的。作者文件定義了哪些人是 “Go語言作者” - 版權持有者。

    如果你在提交變更的時候有新添加的文件,那么應該使用標準的版權頭:

    // Copyright 2020 The Go Authors. All rights reserved.
    // Use of this source code is governed by a BSD-style
    // license that can be found in the LICENSE file.

    (如果你此刻是在 2021 年或者往后的時間閱讀這份文檔,請使用你當前的年份。)倉庫里的文件版權生效于被添加進去的當年,不要在你變更的文件里更改版權信息里的年份。

    mail 命令錯誤大全和故障排除

    git codereview mail命令失敗的最常見原因是因為你的郵件地址和你在注冊流程中使用的郵件地址不匹配。

    如果你看到這樣的輸出信息:

    remote: Processing changes: refs: 1, done
    remote:
    remote: ERROR: In commit ab13517fa29487dcf8b0d48916c51639426c5ee9
    remote: ERROR: author email address XXXXXXXXXXXXXXXXXXX
    remote: ERROR: does not match your user account.

    你需要在這個倉庫下把 Git 用戶郵箱配置為你一開始注冊好的那個郵箱。更正郵箱地址以確保不會再發生這個錯誤:

    $ git config user.email email@address.com

    然后通過以下命令修改你的 commit 信息,更正里面的用戶名和郵箱:

    $ git commit --amend --author="Author Name "

    最后運行一下的命令再重試一次:

    $ git codereview mail

    快速測試你的代碼變更

    如果每一次單獨的代碼變更都對整個代碼樹運行 all.bash 腳本的話太費勁了,盡管我們極力建議你在發送代碼變更之前跑一下這個腳本,然而在開發的期間你可能只想要編譯和測試那些你涉及到的包。

    • 通常來說,你可以運行 make.bash 而不是 all.bash 來只構建 Go 工具鏈,而不需要運行整個測試套件。或者你可以運行 run.bash 來運行整個測試套件而不構建 Go 工具鏈。你可以把 all.bash 看成是依次執行 make.bash和 run.bash。

    • 在這個章節,我們會把你存放 Go 語言倉庫的目錄稱為 $GODIR。make.bash 腳本構建的 go 工具會被安裝到 $GODIR/bin/go 然后你就可以調用它來測試你的代碼了。例如,如果你修改了編譯器而且你想要測試看看會對你自己項目里的測試套件造成怎樣的影響,直接用它運行 go test:

      $ cd
      $ $GODIR/bin/go test
    • 如果你正在修改標準庫,你可能不需要重新構建編譯器:你可以直接在你正在修改的包里跑一下測試代碼就可以了。你可以使用平時用的 Go 版本或者從克隆下來的源碼構建而成的編譯器(有時候這個是必須的因為你正在修改的標準庫代碼可能會需要一個比你已經安裝的穩定版更新版本的編譯器)來做這件事。

      $ cd $GODIR/src/hash/sha1
      $ [make changes...]
      $ $GODIR/bin/go test .
    • 如果你正在修改編譯器本身,你可以直接重新編譯 編譯 工具(這是一個使用 go build 命令編譯每一個單獨的包之時會調用到的一個內部的二進制文件)。完成之后,你會想要編譯或者運行一些代碼來測試一下:

      $ cd $GODIR/src
      $ [make changes...]
      $ $GODIR/bin/go install cmd/compile
      $ $GODIR/bin/go build [something...] # test the new compiler
      $ $GODIR/bin/go run [something...] # test the new compiler
      $ $GODIR/bin/go test [something...] # test the new compiler

      同樣的操作可以應用到 Go 工具鏈里的其他內部工具,像是 asm,cover,link 等等。直接重新編譯然后使用 go install cmd/ 命令安裝,最后使用構建出來的 Go 二進制文件測試一下。

    • 除了標準的逐包測試,在 $GODIR/test 目錄下有一個頂級的測試套件,里面包含了多種黑盒和回歸測試。這個測試套件是包含在 all.bash 腳本里運行的,不過你也可以手動運行它:

      $ cd $GODIR/test
      $ $GODIR/bin/go run run.go

    向子倉庫提交貢獻 (golang.org/x/...)

    如果你正在向一個子倉庫提交貢獻,你需要使用 go get 來獲取對應的 Go 包。例如,如果要向 golang.org/x/oauth2 包貢獻代碼,你可以通過運行以下的命令來獲取代碼:

    $ go get -d golang.org/x/oauth2/...

    緊接著,進入到包的源目錄($GOPATH/src/golang.org/x/oauth2),然后按照正常的代碼貢獻流程走就行了。

    指定一個評審人/抄送其他人

    除非有明確的說明,比如在你提交代碼變更之前的討論中,否則的話最好不要自己指定評審人。所有的代碼變更都會自動抄送給 golang-codereviews@googlegroups.com 郵件組。如果這是你的第一次提交代碼變更,在它出現在郵件列表之前可能會有一個審核延遲,主要是為了過濾垃圾郵件。

    你可以指定一個評審人或者使用 -r/-cc 選項抄送有關各方。這兩種方式都接受逗號分隔的郵件地址列表:

    $ git codereview mail -r joe@golang.org -cc mabel@example.com,math-nuts@swtch.com

    同步你的客戶端

    在你做代碼變更期間,可能有其他人的變更已經先你一步被提交到主倉庫里,那么為了保持你的本地分支更新,運行:

    git codereview sync

    (這個命令背后運行的是 git pull -r.)

    其他人評審代碼

    評審人作為評審流程的一部分可以直接提交代碼到你的變更里(就像是在 Github 工作流里有其他人把 commits 依附到你的 PR 上了)。你可以導入這些他人提交的變更到你的本地 Git 分支上。在 Gerrit 的評審頁面,點擊右上角的 "Download ▼" 鏈接,復制 "Checkout" 命令然后在你的本地 Git 倉庫下運行它。這個命令類似如下的格式:

    $ git fetch https://go.googlesource.com/review refs/changes/21/13245/1 && git checkout FETCH_HEAD

    如果要撤銷,切換回你之前在開發的那個分支即可。

    設置 git 別名

    git codereview 相關的命令可以直接在終端鍵入對應的選項運行,例如:

    $ git codereview sync

    不過給 git codereview 子命令命令設置別名會更方便使用,上面的命令可以替換成:

    $ git sync

    git codereview 的子命令的名字是排除了 Git 本身的命令關鍵字而挑選出來的,所以不用擔心設置了這些別名會和 Git 本身的命令沖突。要設置這些別名,復制下面的文本到你的 Git 配置文件里(通常是在 home 路徑下的 .gitconfig 文件):

    [alias]
    change = codereview change
    gofmt = codereview gofmt
    mail = codereview mail
    pending = codereview pending
    submit = codereview submit
    sync = codereview sync

    發送多個依賴的變更

    老司機用戶可能會想要把相關的 commits 疊加到一個單獨的分支上。Gerrit 允許多個代碼變更之間相互依賴,形成這樣的依賴鏈。每一個變更需要被單獨地核準和提交,但是依賴對于評審人來說是可見的。

    要發送一組依賴的代碼更改,請將每個變更作為不同的 commit 保存在同一分支下,然后運行:

    $ git codereview mail HEAD

    要確保顯示地指定 HEAD,不過這在單個變更的場景里通常是不需要指定的。

    英文原文地址

    https://golang.org/doc/contribute.html

    References

    [1]?代碼評審:?https://github.com/golang/go/wiki/CodeReview[2]?Contributing to gccgo:?https://golang.org/doc/gccgo_contribute.html[3]?簽署以及提交:?https://cla.developers.google.com/clas[4]?go.googlesource.com:?https://go.googlesource.com/[5]?這個頁面:?https://go-review.googlesource.com/login/[6]?貢獻代碼之前:?#貢獻代碼之前[7]?創建一個綁定了外部郵箱的 Google 賬號:?https://accounts.google.com/SignUpWithoutGmail[8]?individual contributor license agreement:?https://developers.google.com/open-source/cla/individual[9]?corporate contributor license agreement:?https://developers.google.com/open-source/cla/corporate[10]?Google Developers Contributor License Agreements:?https://cla.developers.google.com/clas?pli=1&authuser=1[11]?golang-dev?郵件組:?mailto:golang-dev@googlegroups.com[12]?go.googlesource.com:?https://go.googlesource.com/[13]?go.googlesource.com:?https://go.googlesource.com/[14]?go-review.googlesource.com/login/:?https://go-review.googlesource.com/login/[15]?issue 列表:?https://github.com/golang/go/issues[16]?is:issue is:open label:NeedsInvestigation:?https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+label%3ANeedsInvestigation[17]?is:issue is:open label:NeedsFix:?https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+label%3ANeedsFix[18]?is:issue is:open label:NeedsFix "golang.org/cl":?https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+label%3ANeedsFix+"golang.org%2Fcl"[19]?is:issue is:open label:NeedsFix NOT "golang.org/cl":?https://github.com/golang/go/issues?q=is%3Aissue+is%3Aopen+label%3ANeedsFix+NOT+"golang.org%2Fcl"[20]?6 個月開發周期:?https://golang.org/wiki/Go-Release-Cycle[21]?變更提議流程:?https://golang.org/s/proposal-process[22]?security@golang.org:?mailto:security@golang.org[23]?GitHub 工作流:?https://guides.github.com/introduction/flow/[24]?寫好 Commits 信息:?#良好的-commit-信息[25]?建議的格式:?#良好的-commit-信息[26]?把它們合并成一條:?https://stackoverflow.com/questions/31668794/squash-all-your-commits-in-one-before-a-pull-request-in-github[27]?寫好并測試好你的代碼:?https://golang.org/doc/code.html[28]?快速測試你的代碼變更:?#快速測試你的代碼變更[29]?mail 命令錯誤大全和故障排除:?#mail-命令錯誤大全和故障排除[30]?建議的 commit 信息格式:?#良好的-commit-信息[31]?使用郵件:?https://gerrit-review.googlesource.com/Documentation/intro-user.html#reply-by-email[32]?把它們合并成一條:?https://stackoverflow.com/questions/31668794/squash-all-your-commits-in-one-before-a-pull-request-in-github[33]?benchstat:?https://godoc.org/golang.org/x/perf/cmd/benchstat[34]?Go issue tracker:?https://golang.org/issue/12345[35]?建議的格式:?#良好的-commit-信息[36]?構建面板:?https://build.golang.org/[37]?代碼評審:?https://golang.org/wiki/CodeReview[38]?變更日志:?https://golang.org/change[39]?貢獻者:?https://golang.org/CONTRIBUTORS[40]?作者:?https://golang.org/AUTHORS[41]?作者:?https://golang.org/AUTHORS[42]?注冊流程:?#步驟-0-選擇一個-google-賬號[43]?golang-codereviews@googlegroups.com:?https://groups.google.com/group/golang-codereviews

    總結

    以上是生活随笔為你收集整理的golang中文文档_【译】Go 语言源码贡献官方指导文档的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    香蕉国产91| 欧美一区二区在线免费看 | 婷婷五月情 | 亚洲最大在线视频 | www日韩在线| 久久久久女教师免费一区 | 美腿丝袜一区二区三区 | 久久久久久国产精品 | 91亚洲狠狠婷婷综合久久久 | 色狠狠综合 | 91九色视频国产 | 国产精品亚洲视频 | 精品国产电影 | 99久久激情视频 | 91免费网站在线观看 | 五月开心六月伊人色婷婷 | 伊人影院99 | 人人干免费 | 国产福利专区 | 国产精品porn | 国产在线观看二区 | 亚洲国产精品久久久久久 | 婷婷激情在线 | 蜜臀av性久久久久蜜臀av | 毛片网在线播放 | 五月天堂网| 国产色视频一区 | av夜夜操 | 天天操天天干天天操天天干 | 精品中文字幕视频 | 中文一区二区三区在线观看 | 亚洲高清精品在线 | 国产美女在线精品免费观看 | 99视频精品 | 色网站视频 | 日日干天天插 | 亚洲一二视频 | 福利视频精品 | 天天综合天天做天天综合 | 国产艹b视频 | 国产精品久久久网站 | 国产精品成人免费精品自在线观看 | 国产色视频一区 | 中中文字幕av在线 | 四月婷婷在线观看 | 五月婷婷丁香激情 | 亚洲,国产成人av | 久久黄色网址 | 成人免费视频观看 | 久久婷婷五月综合色丁香 | 蜜桃av久久久亚洲精品 | 成人黄色中文字幕 | 国产成人av网址 | 亚洲高清91| 91免费网 | 日韩三级一区 | 干天天 | 在线看黄色av | 天天色 天天 | 激情图片久久 | 午夜视频在线观看一区二区三区 | 一区二区三区不卡在线 | 国产1区在线观看 | a成人v | 久久久一本精品99久久精品66 | 国产在线第三页 | 这里有精品在线视频 | 日韩av一卡二卡三卡 | 丁香六月久久综合狠狠色 | 一区二区欧美在线观看 | 五月婷婷在线视频观看 | 国产精品免费看久久久8精臀av | 亚洲精品乱码久久久久久蜜桃欧美 | 婷婷开心久久网 | 国产激情电影综合在线看 | 午夜av在线免费 | 久久观看最新视频 | 国产资源精品 | 成人97视频| 免费网站v| 久久精品区 | 日日干夜夜草 | 亚洲国产精品免费 | 国产专区第一页 | 首页中文字幕 | 就要干b| 国产手机视频在线观看 | 久久xx视频 | 亚洲九九九在线观看 | 日韩欧美69 | 91亚洲精品久久久久图片蜜桃 | 国产区免费在线 | 综合网天天射 | 波多野结衣理论片 | 午夜精品一区二区三区在线 | 色香蕉视频 | 日日摸日日 | 欧美另类成人 | 人人爽人人爽人人片av免 | 中文字幕一区二区三区乱码不卡 | 天天操导航| 久久久亚洲电影 | 久久久久久久国产精品 | 日本久久久影视 | av在线免费网 | 亚洲日日夜夜 | 91试看 | 在线视频观看国产 | 黄色软件在线观看 | 99热999| 成片免费观看视频 | 久久资源在线 | 国产精品美女久久久久久免费 | 999久久久久久久久久久 | 日韩精品视频网站 | 天天干天天草天天爽 | 欧美一级免费黄色片 | 亚洲精品国产精品久久99热 | 99爱国产精品 | 密桃av在线 | 国产一级三级 | 亚洲精品资源在线观看 | 日韩在线观看你懂的 | 亚洲蜜桃在线 | 91粉色视频| 一区二区中文字幕在线播放 | 亚洲激情五月 | 中文字幕在线免费 | 久久av网 | 亚洲国产精品视频在线观看 | 水蜜桃亚洲一二三四在线 | 国产婷婷vvvv激情久 | 91九色成人 | 亚洲精品在线国产 | 日韩在线免费高清视频 | 天天搞天天 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 欧美日韩免费视频 | www.天天草| 国产在线观看一 | 亚洲精品在线二区 | 精品久久久成人 | 美女久久 | 欧美激情综合色综合啪啪五月 | 精品国产电影一区二区 | 久久免费精品一区二区三区 | 免费高清在线一区 | 天天色婷婷| 黄色电影小说 | 日韩三级免费观看 | 99成人免费视频 | 超碰97人人在线 | 99色亚洲| 国产精品免费大片视频 | 亚洲国产日韩欧美在线 | 国产黄a三级 | 中文字幕在线观看免费高清完整版 | 欧美日视频 | 成人av在线电影 | 亚洲禁18久人片 | 久久精品久久久精品美女 | 国产视频一区二区在线观看 | 国产成人一二片 | 成人av一区二区兰花在线播放 | 久久五月婷婷丁香社区 | 亚洲第一区精品 | v片在线看 | 国产福利一区二区三区在线观看 | 中文字幕在线免费观看 | 午夜三级影院 | 91中文字幕网 | 欧美一级视频免费看 | 在线高清av | 中文区中文字幕免费看 | 亚洲国产中文字幕 | 91精品国产福利在线观看 | 在线观看亚洲精品 | 久久成人国产 | 成人av视屏 | 草久电影 | 成人黄性视频 | av在线播放不卡 | 久久视频6 | av丝袜在线| 中文字幕文字幕一区二区 | 亚洲精品视频免费 | 国内精品免费久久影院 | 一区二区三区久久精品 | 日韩视频在线不卡 | 性色在线视频 | 日韩av免费大片 | 成人免费影院 | 日韩一级成人av | 摸bbb搡bbb搡bbbb | 99国内精品久久久久久久 | 久久亚洲综合国产精品99麻豆的功能介绍 | 中文字幕影片免费在线观看 | 天天亚洲 | 亚洲japanese制服美女 | 在线观看一区 | 日韩黄色在线观看 | 五月激情视频 | 亚洲狠狠婷婷综合久久久 | 日韩欧美精品在线观看视频 | v片在线播放 | 夜色资源站国产www在线视频 | 久久午夜免费视频 | 免费看黄网站在线 | 欧美大香线蕉线伊人久久 | 麻花天美星空视频 | 美女很黄免费网站 | 欧美专区亚洲专区 | 又黄又刺激的网站 | 特级大胆西西4444www | 天天操夜夜操 | 天天曰天天干 | 丝袜美腿在线视频 | 国产视频一区在线播放 | 五月婷久 | 中文字幕在线观看完整版电影 | 精品99在线观看 | 波多野结衣在线观看一区二区三区 | 一区中文字幕 | 国产成人一区二区三区 | 九七视频在线观看 | 懂色av一区二区在线播放 | 韩国一区在线 | 久草在线资源观看 | 国产三级在线播放 | 亚洲精品欧美视频 | 国产福利a | 亚洲高清视频在线 | 午夜精品久久一牛影视 | 爱爱一区 | 免费亚洲黄色 | 九月婷婷色 | 曰韩在线| 碰超在线观看 | 狠狠躁夜夜躁人人爽视频 | 三级免费黄色 | 国产xxxx做受性欧美88 | av先锋中文字幕 | 免费能看的黄色片 | 国产高清久久 | 91在线精品一区二区 | 国产涩图 | 999成人网 | 欧美日韩一区二区三区在线观看视频 | 草在线 | 国产.精品.日韩.另类.中文.在线.播放 | 麻豆一精品传二传媒短视频 | 天天摸天天干天天操天天射 | 天天综合网 天天 | 日三级在线| 午夜成人免费电影 | 午夜美女视频 | 亚洲最大成人网4388xx | 国产黄在线免费观看 | 最新av免费在线观看 | 五月网婷婷 | 日韩高清av在线 | 亚洲精品在线免费 | 久久国产精品电影 | 亚洲欧美日韩一二三区 | 午夜国产一区 | 美女网站在线看 | 国产九九九精品视频 | 九九99| 日韩美女高潮 | 国产一区二区精品在线 | 香蕉视频日本 | 亚洲视频免费在线观看 | 午夜免费久久看 | 黄色软件视频大全免费下载 | 欧美 高跟鞋交 xxxxhd | 97综合在线 | 成年人免费观看国产 | 久久免费看av | 亚洲欧美日韩国产精品一区午夜 | 色狠狠操| 天天艹日日干 | 深夜福利视频一区二区 | 少妇bbbb搡bbbb搡bbbb | 丁香网五月天 | 免费在线中文字幕 | 一级片免费观看视频 | 99精彩视频在线观看免费 | 亚洲午夜激情网 | 日韩一区在线播放 | 国产第一页在线播放 | 久久久精品网站 | 日本h视频在线观看 | 91中文字幕在线视频 | 免费观看性生交 | av观看久久久 | 伊人宗合网 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 麻豆视频国产在线观看 | 天天伊人狠狠 | 午夜精品久久久久久99热明星 | 久久久精品电影 | 国产成人一区二区三区在线观看 | 国产美女免费看 | 国产精品久久免费看 | 97超级碰碰碰视频在线观看 | 国产成人精品aaa | 成人精品视频久久久久 | 亚洲色影爱久久精品 | 91亚洲精品国偷拍自产在线观看 | 正在播放国产精品 | 日韩久久久久 | 天天狠狠 | 九九色在线| 成人久久影院 | 久草免费手机视频 | 国产视频精选在线 | 亚洲六月丁香色婷婷综合久久 | 国产区在线 | 精品亚洲在线 | 伊人精品影院 | 日日夜夜av | 日韩va在线观看 | 丁香视频免费观看 | 天天爽天天摸 | 69av国产 | 久操综合| 亚洲无线视频 | 国产欧美三级 | 久久久久久久久久久久久国产精品 | 综合色影院 | 欧美一级片在线观看视频 | 日日干天天爽 | 欧美日韩性生活 | 日韩有码中文字幕在线 | 在线观看久久 | 欧美综合干 | 久久久九色精品国产一区二区三区 | 日精品 | 97av免费视频 | 青草视频在线 | 色综久久 | 欧美一级片在线播放 | 国产福利91精品张津瑜 | 久草久视频 | 四虎影视成人永久免费观看视频 | 97精品国产97久久久久久 | 色天天久久 | 97在线观看免费观看高清 | 久久视频精品在线 | 亚州精品天堂中文字幕 | 久久午夜电影网 | 91精品国产92久久久久 | 日韩一区二区三区免费电影 | v片在线看 | 美女免费网视频 | 国产精品不卡在线 | 一区在线观看 | 视频一区久久 | 欧美日韩另类在线 | 毛片99 | 午夜电影av | 免费a v在线 | www91在线观看| 天天干夜夜想 | 成年人免费av网站 | 国内精品福利视频 | 在线观看亚洲国产精品 | 在线黄色观看 | avsex| 中文字幕色播 | 九九热av| 丁香综合五月 | 成人av免费网站 | 欧美资源 | 伊人久久精品久久亚洲一区 | 久草精品视频在线看网站免费 | 国产精品久久久久一区二区三区 | 三级av在线播放 | 午夜视频黄 | 亚洲欧美经典 | 日韩欧美精品一区二区 | 久久线视频 | 欧美福利网站 | 婷香五月 | 国产精品久久久久影视 | 亚洲精欧美一区二区精品 | www.色婷婷.com| 永久免费精品视频网站 | 四虎在线观看视频 | 91一区啪爱嗯打偷拍欧美 | 一二区电影 | 伊人婷婷久久 | 国产精品剧情 | 99视频在线观看免费 | 天天操操| 久久人人爽爽 | 欧美大码xxxx | 视频91在线 | 欧洲一区二区在线观看 | 亚洲理论电影网 | 天天操天天添 | 日韩一区二区三区高清在线观看 | 色片网站在线观看 | 久久影院中文字幕 | 天天操夜操视频 | 高清中文字幕 | 丝袜av一区| 日本黄区免费视频观看 | 欧美极度另类 | 超碰在线人人爱 | 国内精品视频一区二区三区八戒 | 国产精品久久久久久久久久久久久 | 免费在线看成人av | av高清一区二区三区 | av 在线观看 | 91精品视频导航 | 丝袜制服天堂 | 色综合天天色 | 日韩天天干 | 欧美三级在线播放 | ww亚洲ww亚在线观看 | 人人射人人插 | 久艹在线观看视频 | 日韩大陆欧美高清视频区 | 亚洲精品在线观看不卡 | 亚洲一区二区精品视频 | 色天天 | 麻豆影视在线播放 | 亚洲成人av一区二区 | 免费在线播放黄色 | 成年人免费在线播放 | 日日爽日日操 | 亚洲一区二区高潮无套美女 | 一区二区精品久久 | 欧美a影视| 久久亚洲成人网 | 国产一级电影免费观看 | 日韩精品一区二区三区丰满 | 国产精品久久久久一区二区国产 | 在线色亚洲 | 免费黄色av电影 | 日韩精品首页 | 91丨九色丨勾搭 | 精品91久久久久 | 午夜一级免费电影 | 超碰在线人人97 | 午夜精选视频 | 亚洲精品综合一区二区 | 久久1电影院 | 美女久久久久久 | 777视频在线观看 | 在线免费观看成人 | 亚洲国产欧美一区二区三区丁香婷 | 狠狠色丁香婷婷综合久久片 | 免费在线观看污 | a在线视频v视频 | 亚洲无吗视频在线 | 免费黄在线观看 | 国产精品免费看 | 色天天综合网 | 在线观看中文字幕一区 | adn—256中文在线观看 | 久久超碰免费 | 亚洲精品乱码久久久久久9色 | 女人18片 | 久草在线高清视频 | 99久高清在线观看视频99精品热在线观看视频 | 亚洲精品乱码久久久久v最新版 | 亚洲国产精品影院 | 欧美精品国产综合久久 | 日韩中文字幕在线不卡 | 久久综合久久综合这里只有精品 | 日韩精品视频在线观看免费 | 久久久久久久久久久久99 | 99视频这里只有 | 天堂网一区 | 久久久久97国产 | 亚洲丝袜中文 | 成人午夜毛片 | 成人片在线播放 | 国内揄拍国产精品 | 黄色小视频在线观看免费 | 一区二区三区免费网站 | av免费看看 | 久久在线看| 精品一区在线 | se婷婷| 国产资源精品在线观看 | 人人看看人人 | 色狠狠一区二区 | 999国内精品永久免费视频 | 天天艹天天干天天 | 亚洲午夜久久久久久久久久久 | 深夜男人影院 | 婷婷六月综合亚洲 | 六月色丁香 | 亚洲精品国产品国语在线 | 中文字幕久久亚洲 | 久久久精品 一区二区三区 国产99视频在线观看 | 一区二区三区在线免费 | 亚洲欧洲日韩在线观看 | 久久在线视频精品 | 一二三区在线 | 国产亚洲一区二区在线观看 | 国产这里只有精品 | 国产精品视频免费 | av免费黄色 | 夜夜操狠狠干 | 国产精品99久久久久人中文网介绍 | 97自拍超碰 | 黄色性av | 狠狠操导航 | 免费观看视频黄 | 欧美资源在线观看 | av成人免费 | 久久久久亚洲精品成人网小说 | 欧美午夜精品久久久久 | 黄色综合 | 亚洲第五色综合网 | 天天色综合天天 | 日韩在线视频不卡 | 91免费高清 | 人成午夜视频 | 96国产在线| 狠狠精品 | 欧美另类xxxxx | 九九九免费视频 | 亚洲欧洲精品久久 | 成人动漫精品一区二区 | 一级α片 | 少妇性bbb搡bbb爽爽爽欧美 | 日b黄色片| 日韩在线观看网站 | 国产精品第10页 | 欧美一区二区精美视频 | 天天人人 | 永久免费视频国产 | 国产精品高 | 国产精品尤物 | 色天天综合久久久久综合片 | 国产精品不卡在线观看 | 99欧美 | 福利视频网址 | 99在线免费观看 | 国产精品视频免费看 | 欧美大片在线观看一区 | 免费日韩一区二区三区 | 超碰97在线资源站 | 99久久精品国产观看 | 午夜精品福利一区二区 | 97超级碰碰碰碰久久久久 | 99久久精品国产免费看不卡 | 国产免费a | 美女福利视频一区二区 | 狠狠操狠狠干天天操 | 久久激情视频免费观看 | 国产黄大片在线观看 | 日日弄天天弄美女bbbb | 日韩91在线 | 九九久久影院 | 人人爽人人片 | 97综合视频 | 成年人毛片在线观看 | 天天综合网~永久入口 | av免费在线观 | 免费亚洲精品视频 | 日韩在线视频网站 | 麻豆传媒一区二区 | 国产一区二区三区四区大秀 | 亚洲日韩精品欧美一区二区 | 久草视频免费在线播放 | 香蕉网在线观看 | 国产中文自拍 | 99久久激情视频 | 欧美在线观看视频一区二区 | 黄在线免费看 | 日操操 | 精品视频在线播放 | 精品免费视频. | 精品二区久久 | 免费国产在线精品 | 五月婷婷一区 | 超碰在线公开 | 日韩欧美一区二区三区视频 | 久久精品一二区 | 在线观看视频在线观看 | 久久综合狠狠综合久久综合88 | 亚洲专区在线播放 | 久久99精品视频 | 国产一级特黄毛片在线毛片 | 五月激情亚洲 | 久久av电影 | 人成在线免费视频 | 美女精品| 久久精品国产亚洲a | 亚洲黄色免费观看 | 国产a级精品 | 国产一级在线 | 亚洲无线视频 | 国产五月 | 久草网视频 | 国产高清精 | 欧美,日韩 | 天天要夜夜操 | 国产精品一区二区三区四区在线观看 | 91香蕉视频色版 | 视频一区二区国产 | 久草在线免费看视频 | 97**国产露脸精品国产 | 一本—道久久a久久精品蜜桃 | 能在线观看的日韩av | 一区二区三区在线观看 | 国产精品视频99 | 欧美黑人xxxx猛性大交 | 日韩一级片大全 | 日日干天天 | 免费欧美精品 | 深爱开心激情网 | 99精品欧美一区二区三区 | 国产又黄又硬又爽 | 国产热re99久久6国产精品 | 日韩二区三区 | 激情黄色av| 日韩高清一 | 天天干中文字幕 | 日本高清中文字幕有码在线 | 久操视频在线 | 亚洲综合黄色 | 一级久久久 | 中文字幕免费中文 | 国产精品久久久久永久免费 | 国产黄大片 | 99热精品久久| 在线观看的黄色 | 久热电影 | 亚洲成人麻豆 | 国产成人精品一区二区三区福利 | 久草国产在线 | 日韩v欧美v日本v亚洲v国产v | 国产成人在线免费观看 | .国产精品成人自产拍在线观看6 | 在线免费观看羞羞视频 | 人人澡人摸人人添学生av | 偷拍久久久 | 国产精品日韩久久久久 | 亚洲精品中文在线观看 | 99久久精 | 97视频在线免费 | 欧美另类交在线观看 | a级片在线播放 | 91手机视频 | 精品九九九 | 91精选 | 成人一级免费电影 | 去干成人网 | 天天操天天爱天天干 | 久久亚洲福利 | 国产视频在线看 | 亚洲成人免费在线观看 | 成人av在线影视 | 日韩在线一级 | 91亚洲精品久久久蜜桃 | 欧美性视频网站 | 亚洲综合国产精品 | 中文字幕乱视频 | 日韩一级片网址 | 色视频在线免费 | 日日日操操| 三级黄色网址 | 成人免费色 | 国产二区免费视频 | 91精品秘密在线观看 | 992tv人人网tv亚洲精品 | 国产精品久久久久婷婷二区次 | 毛片一区二区 | 99久久激情 | 久久影院一区 | 成人蜜桃视频 | 亚洲一区二区精品3399 | 久久日韩精品 | 久久久亚洲成人 | 99热国产精品| 色av男人的天堂免费在线 | 久久蜜臀一区二区三区av | 97av免费视频 | 亚洲一级性 | 人人澡人人干 | 99九九99九九九视频精品 | 久久精品一二区 | 91精品国产麻豆国产自产影视 | www视频在线观看 | 精品视频专区 | 亚洲视频第一页 | 久草在线免费资源 | 久久久久久国产精品999 | 亚洲天堂网视频在线观看 | 伊人色**天天综合婷婷 | 日本婷婷色 | 美女久久久久久久久久 | 成人va天堂 | 久久99久久精品 | 波多野结衣网址 | 狠狠色狠狠色终合网 | 国产日韩欧美在线一区 | 99视频免费看 | 日韩国产精品久久久久久亚洲 | 国产精品一区二区三区免费视频 | 日韩有码欧美 | 国产日韩欧美网站 | 国产xx视频 | 日韩高清免费在线观看 | 免费毛片一区二区三区久久久 | 日韩精品一区二区三区免费视频观看 | 国产剧情在线一区 | 亚洲午夜精品福利 | 最近免费观看的电影完整版 | 久久视频 | 国产精品成人免费精品自在线观看 | 久久在线免费观看视频 | 免费看v片 | 国产精品不卡在线播放 | 精品黄色片| 成人国产精品免费观看 | 国产成人精品午夜在线播放 | 亚洲好视频 | 在线99视频 | www.狠狠操.com| 久久黄色免费视频 | 最新av中文字幕 | 99热这里只有精品1 av中文字幕日韩 | 亚洲自拍av在线 | 久久久久成人免费 | 99九九热只有国产精品 | 在线观看麻豆av | 国产99自拍 | 丰满少妇高潮在线观看 | 国产视频在线观看免费 | 新版资源中文在线观看 | 天天亚洲 | 欧洲精品二区 | 视频二区在线视频 | 亚洲最大av在线播放 | 日韩av看片 | 久久97视频 | 深夜福利视频一区二区 | 婷五月天激情 | 夜夜操网站 | 在线视频99 | 日韩欧美在线一区二区 | 国产黄色片久久 | 国产在线视频一区二区三区 | 日韩在线第一 | 久久精品影视 | 91中文字幕网 | 精品女同一区二区三区在线观看 | 91精选| 久久在线视频精品 | 久久视屏网 | 在线国产日韩 | 精品国产一区二区三区久久久蜜臀 | 久久高清片 | 欧美一级日韩免费不卡 | 国产一区在线观看免费 | 国产精彩视频一区二区 | 亚洲免费黄色 | 黄色成人毛片 | 欧美日韩中文国产 | 久久综合久久综合这里只有精品 | 手机在线日韩视频 | 91免费观看网站 | 欧美色图亚洲图片 | 日韩在线播放av | av色影院| 91视频3p| 久久一区二区三区国产精品 | 一区二区视频播放 | 亚洲一区二区三区毛片 | 亚洲黄色高清 | 超碰在线97观看 | 国产精品青草综合久久久久99 | 国产欧美精品一区二区三区 | 在线观看日本韩国电影 | 国产成人在线免费观看 | 中文字幕在线观看2018 | 伊人婷婷综合 | 亚洲国产精品影院 | 国产免费大片 | 在线国产99| 亚洲精品久久久久久中文传媒 | 婷婷国产一区二区三区 | 久久久精品视频成人 | 精品久久一二三区 | 国内精品视频久久 | 在线观看一级片 | 人人爽人人爽人人爽人人爽 | 亚洲免费a | 日韩免费看的电影 | 天堂在线v| 91高清视频 | 久草剧场| .精品久久久麻豆国产精品 亚洲va欧美 | a黄色 | 美女av免费看| 在线天堂日本 | 免费成人在线网站 | 国产专区视频在线 | 九九涩涩av台湾日本热热 | 久艹视频在线免费观看 | 美女网站在线免费观看 | 精品高清美女精品国产区 | 91成人免费 | 久久99精品久久只有精品 | 91麻豆精品国产91久久久久久 | 日本黄色免费播放 | 国产精品一区二区三区久久久 | 欧美性成人 | 久久av免费观看 | 蜜臀av一区| 天天干天天玩天天操 | 91色国产| 日韩激情精品 | 国产一级视频在线观看 | 日韩一区二区三区免费视频 | 国产日韩在线播放 | 日本三级国产 | 天天色天天综合网 | 免费看的黄色网 | 黄色福利网站 | 国产精品video | 婷婷色在线观看 | 欧美日韩一区二区在线观看 | 香蕉久久久久久av成人 | 亚洲国产一二三 | 在线视频日韩欧美 | 黄色一级大片在线观看 | 日韩资源在线观看 | 国产成人精品亚洲 | 91高清不卡 | 国产在线播放不卡 | 日韩在线观看视频免费 | 国产精品一区二区免费在线观看 | 五月婷婷综 | 日韩在线 | 毛片无卡免费无播放器 | 丁香五月缴情综合网 | 九七视频在线 | 亚洲一级黄色片 | 国产高清免费视频 | 日日夜夜网站 | 日韩区在线观看 | 九九免费观看视频 | 亚洲婷婷免费 | 综合视频在线 | 99视频偷窥在线精品国自产拍 | av高清不卡 | 成年人免费在线观看 | 久久免费福利视频 | 国产精品一区专区欧美日韩 | 色偷偷88888欧美精品久久久 | 亚洲四虎在线 | 久久久久久视频 | 亚洲精品高清在线 | www.夜夜骑.com | 亚洲视频免费视频 | 成人久久18免费网站图片 | 欧美黑人性爽 | 色综合色综合久久综合频道88 | 久久国色夜色精品国产 | 久草香蕉在线视频 | 91中文字幕网| 精品在线你懂的 | 高清视频一区二区三区 | 成人在线视频免费观看 | 亚洲九九九在线观看 | 人人狠狠综合久久亚洲婷 | 午夜婷婷网 | 91成人国产 | 天天干夜夜爽 | 亚洲国产精品久久久久婷婷884 | 热精品| 国产精品18久久久 | 成人免费视频视频在线观看 免费 | 91大神精品视频在线观看 | 欧美一级性生活视频 | 日韩精品一区二区不卡 | 一区二区三区在线免费播放 | 国产流白浆高潮在线观看 | 又黄又爽的免费高潮视频 | 亚洲国产欧美一区二区三区丁香婷 | 99操视频| 成年人视频在线免费 | 中文字幕亚洲综合久久五月天色无吗'' | 国产一区二区在线观看视频 | 国产精品99久久久精品 | 成人中文字幕在线观看 | 日韩一区二区三区高清免费看看 | 国产精品日韩高清 | 国产a级免费 | 五月情婷婷 | 伊人伊成久久人综合网小说 | 9ⅰ精品久久久久久久久中文字幕 | 日韩久久精品一区二区三区下载 | 精品999在线观看 | 精品久久久久久久久久岛国gif | 国产蜜臀av | 91成人欧美 | 日韩欧美99 | 亚洲精品美女久久久久网站 | 五月婷婷视频在线 | 国产在线成人 | 天堂网中文在线 | av丁香花| 中文字幕在线视频网站 | 欧美一区二区三区特黄 | 日韩色在线观看 | 国产亚洲91| 日韩视频一区二区在线观看 | 久久无码av一区二区三区电影网 | 亚洲精品激情 | 久久久久久久久久亚洲精品 | 久久综合导航 | 黄色在线看网站 | 日韩成人中文字幕 | 久久系列| 欧美一级日韩三级 | 97在线影院 | 亚洲永久精品在线观看 | 探花视频在线观看免费版 | 国产精品毛片久久久久久久 | 国产一级高清视频 | 99久久电影 | 日韩欧美在线影院 | 欧美午夜性 | 欧美日韩国产xxx | 免费网站色 | 91毛片在线观看 | av夜夜操 | 婷婷久操 | 国产91勾搭技师精品 | 在线观看日韩国产 | 亚洲国产欧美一区二区三区丁香婷 | 天天干夜夜爱 | 欧美日韩伦理一区 | 精品国产_亚洲人成在线 | 麻豆传媒视频在线免费观看 | av大片免费看 | 国产黄色大全 | 久久婷婷亚洲 | 亚洲黄色免费电影 | 亚洲精选99| 亚州成人av在线 | 久久久精品日本 | 久久草草影视免费网 | 日韩av一区二区在线 | 人人插人人草 | 亚洲黄色精品 | 激情综合色综合久久 | 丰满少妇久久久 | 91九色视频 | 91福利影院在线观看 | 综合网av| 免费看的黄色网 | 精品国产理论 | 日日干视频 | 中文字幕在线不卡国产视频 | 亚洲欧洲中文日韩久久av乱码 | 亚洲精品字幕 | 激情综合网五月激情 | 国产无遮挡又黄又爽在线观看 | 97超碰免费在线 | 日本精品va在线观看 | 亚洲综合欧美精品电影 | 97视频免费看 | 久久色在线观看 | 欧美日韩国产一区二区三区在线观看 | 在线a人片免费观看视频 | 日韩午夜电影 | 久久影视中文字幕 | 欧洲色吧 | 人人玩人人添人人 | 天天干婷婷 | 日本三级全黄少妇三2023 | 亚洲一区二区三区毛片 | 欧美日韩一级视频 | 亚洲精品永久免费视频 | 美女国产免费 | 日韩欧美精品免费 | 久久免费视频在线观看30 | 亚洲国内在线 | 韩日三级在线 | 8x成人免费视频 | 亚洲黄色免费在线 | 免费成人黄色av | 日韩激情一二三区 | 99精品视频免费观看 | 免费看污污视频的网站 | 免费黄色特级片 | 久久久午夜剧场 |