blob: f21e8a4ecdbf03fd684149782587a02b08871e8e [file] [log] [blame]
<!doctype html><html lang=zh-cn class=no-js><head><meta name=ROBOTS content="INDEX, FOLLOW"><link rel=canonical href=https://cn.dubbo.apache.org/zh-cn/contact/contributor/new-contributor-guide_dev/><script>var _hmt=_hmt||[];(function(){var e,t=document.createElement("script");t.src="https://hm.baidu.com/hm.js?3b78f49ba47181e4d998a66b689446e9",e=document.getElementsByTagName("script")[0],e.parentNode.insertBefore(t,e)})()</script><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta http-equiv=Content-Security-Policy content="frame-src *"><meta name=generator content="Hugo 0.122.0"><link rel="shortcut icon" type=image/png href=/imgs/favicon.png><link rel=apple-touch-icon href=/favicons/apple-touch-icon-180x180.png sizes=180x180><link rel=manifest href=/manifest.webmanifest><title>新贡献者向导 | Apache Dubbo</title><meta property="og:title" content="新贡献者向导">
<meta property="og:description" content="新贡献者向导"><meta property="og:type" content="article"><meta property="og:url" content="https://cn.dubbo.apache.org/zh-cn/contact/contributor/new-contributor-guide_dev/"><meta property="article:section" content="contact"><meta property="article:modified_time" content="2023-03-01T09:48:32+08:00"><meta itemprop=name content="新贡献者向导"><meta itemprop=description content="新贡献者向导"><meta itemprop=dateModified content="2023-03-01T09:48:32+08:00"><meta itemprop=wordCount content="368"><meta itemprop=keywords content><meta name=twitter:card content="summary"><meta name=twitter:title content="新贡献者向导"><meta name=twitter:description content="新贡献者向导"><script async src="https://www.googletagmanager.com/gtag/js?id=G-NM6FFMT51J"></script><script>var doNotTrack=!1;if(!doNotTrack){window.dataLayer=window.dataLayer||[];function gtag(){dataLayer.push(arguments)}gtag("js",new Date),gtag("config","G-NM6FFMT51J",{anonymize_ip:!1})}</script><link rel=preload href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css as=style><link href=/scss/main.min.f77e221bcdbe0cadb996060fe82063c747b60c229a1f8bbf0ee529adbadd84fa.css rel=stylesheet integrity><script src=/js/jquery-3.5.1.min.js integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin=anonymous></script><meta name=theme-color content="#326ce5"><link rel=stylesheet href=/css/feature-states.css><meta name=description content="新贡献者向导"><meta property="og:description" content="新贡献者向导"><meta name=twitter:description content="新贡献者向导"><meta property="og:url" content="https://cn.dubbo.apache.org/zh-cn/contact/contributor/new-contributor-guide_dev/"><meta property="og:title" content="新贡献者向导"><meta name=twitter:title content="新贡献者向导"><meta name=twitter:image:alt content="Apache Dubbo"><meta property="og:type" content="article"><meta name=viewport content="width=device-width"><script async defer src=/js/github-buttons.js></script><link href=/css/community.css rel=stylesheet><link href=/css/contactus.css rel=stylesheet><link href=/css/language.css rel=stylesheet><script src=/js/script.js></script></head><body class="td-page td-documentation"><header><nav class="js-navbar-scroll navbar navbar-expand navbar-dark flex-column flex-md-row td-navbar" data-auto-burger=primary><a class=navbar-brand href=/zh-cn/><span class=navbar-logo></span><span class="text-uppercase font-weight-bold">Apache Dubbo</span></a><div class="td-navbar-nav-scroll ml-md-auto" id=main_navbar><ul class="navbar-nav mt-2 mt-lg-0"><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/overview/home/><span>文档</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/blog/><span>博客</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/download/><span>版本发布</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class="nav-link active" href=/zh-cn/contact/><span class=active>联系社区</span></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=https://start.dubbo.apache.org/bootstrap.html target=_blank><span>Initializer</span><i class='fas fa-external-link-alt'></i></a></li><li class="nav-item mr-4 mb-2 mb-lg-0"><a class=nav-link href=/zh-cn/github/><span>Github</span><i class='fa-brands fa-github'></i></a></li><li class="nav-item dropdown d-lg-block"><a class="nav-link dropdown-toggle" href=# id=navbarDropdownMenuLink role=button data-toggle=dropdown aria-haspopup=true aria-expanded=false>中文</a><div class="dropdown-menu dropdown-menu-right" aria-labelledby=navbarDropdownMenuLink><a class=dropdown-item href=/en/>English</a></div></li><li class="nav-item dropdown d-lg-block"><div class="nav-item d-none d-lg-block"></div></li></ul></div></nav><section class="header-hero text-white pb-0 light-text"></section></header><div class="container-fluid td-outer"><div class=td-main><div class="row flex-md-nowrap"><div class="col-12 col-md-3 col-xl-2 td-sidebar d-print-none"><script>$(function(){$("#td-section-nav a").removeClass("active"),$("#td-section-nav #m-zh-cncontactcontributornew-contributor-guide_dev").addClass("active"),$("#td-section-nav #m-zh-cncontactcontributornew-contributor-guide_dev-li span").addClass("td-sidebar-nav-active-item"),$("#td-section-nav #m-zh-cncontactcontributornew-contributor-guide_dev").parents("li").addClass("active-path"),$("#td-section-nav li.active-path").addClass("show"),$("#td-section-nav li.active-path").children("input").prop("checked",!0),$("#td-section-nav #m-zh-cncontactcontributornew-contributor-guide_dev-li").siblings("li").addClass("show"),$("#td-section-nav #m-zh-cncontactcontributornew-contributor-guide_dev-li").children("ul").children("li").addClass("show"),$("#td-sidebar-menu").toggleClass("d-none")})</script><div id=td-sidebar-menu class="td-sidebar__inner d-none"><div id=content-mobile><form class="td-sidebar__search d-flex align-items-center"><button class="btn btn-link td-sidebar__toggle d-md-none p-0 ml-3 fas fa-bars" type=button data-toggle=collapse data-target=#td-section-nav aria-controls=td-docs-nav aria-expanded=false aria-label="Toggle section navigation"></button></form></div><div id=content-desktop></div><nav class="collapse td-sidebar-nav foldable-nav" id=td-section-nav><ul class="td-sidebar-nav__section pr-md-3 ul-0"><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cncontact-li><ul class=ul-1><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactbooks-li><input type=checkbox id=m-zh-cncontactbooks-check>
<label for=m-zh-cncontactbooks-check><a href=/zh-cn/contact/books/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cncontactbooks><span>书籍与资料</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cncontactcontributor-li><input type=checkbox id=m-zh-cncontactcontributor-check>
<label for=m-zh-cncontactcontributor-check><a href=/zh-cn/contact/contributor/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cncontactcontributor><span>Contributor 指南</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributorbecome-a-committer_dev-li><input type=checkbox id=m-zh-cncontactcontributorbecome-a-committer_dev-check>
<label for=m-zh-cncontactcontributorbecome-a-committer_dev-check><a href=/zh-cn/contact/contributor/become-a-committer_dev/ title="如何成为 Dubbo Committer" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributorbecome-a-committer_dev><span>成为 Committer</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributornew-contributor-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributornew-contributor-guide_dev-check>
<label for=m-zh-cncontactcontributornew-contributor-guide_dev-check><a href=/zh-cn/contact/contributor/new-contributor-guide_dev/ title=新贡献者向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributornew-contributor-guide_dev><span>新手向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributormailing-list-subscription-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributormailing-list-subscription-guide_dev-check>
<label for=m-zh-cncontactcontributormailing-list-subscription-guide_dev-check><a href=/zh-cn/contact/contributor/mailing-list-subscription-guide_dev/ title=邮件列表订阅向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributormailing-list-subscription-guide_dev><span>邮件组向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributorreporting-security-issues_dev-li><input type=checkbox id=m-zh-cncontactcontributorreporting-security-issues_dev-check>
<label for=m-zh-cncontactcontributorreporting-security-issues_dev-check><a href=/zh-cn/contact/contributor/reporting-security-issues_dev/ title=报告安全问题 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributorreporting-security-issues_dev><span>反馈漏洞</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributorsoftware-donation-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributorsoftware-donation-guide_dev-check>
<label for=m-zh-cncontactcontributorsoftware-donation-guide_dev-check><a href=/zh-cn/contact/contributor/software-donation-guide_dev/ title=软件捐献向导 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributorsoftware-donation-guide_dev><span>捐献向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributordubbo-extension-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributordubbo-extension-guide_dev-check>
<label for=m-zh-cncontactcontributordubbo-extension-guide_dev-check><a href=/zh-cn/contact/contributor/dubbo-extension-guide_dev/ title="扩展 Dubbo 向导" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributordubbo-extension-guide_dev><span>扩展 Dubbo</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcontributortest-coverage-guide_dev-li><input type=checkbox id=m-zh-cncontactcontributortest-coverage-guide_dev-check>
<label for=m-zh-cncontactcontributortest-coverage-guide_dev-check><a href=/zh-cn/contact/contributor/test-coverage-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcontributortest-coverage-guide_dev><span>测试覆盖率向导</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cncontactcommitter-li><input type=checkbox id=m-zh-cncontactcommitter-check>
<label for=m-zh-cncontactcommitter-check><a href=/zh-cn/contact/committer/ class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cncontactcommitter><span>Committer 指南</span></a></label><ul class="ul-2 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitternew-committer-guide_dev-li><input type=checkbox id=m-zh-cncontactcommitternew-committer-guide_dev-check>
<label for=m-zh-cncontactcommitternew-committer-guide_dev-check><a href=/zh-cn/contact/committer/new-committer-guide_dev/ title="Apache 提交者注册流程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitternew-committer-guide_dev><span>注册流程</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommittercla-signing-guide_dev-li><input type=checkbox id=m-zh-cncontactcommittercla-signing-guide_dev-check>
<label for=m-zh-cncontactcommittercla-signing-guide_dev-check><a href=/zh-cn/contact/committer/cla-signing-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommittercla-signing-guide_dev><span>CLA 签署向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section with-child" id=m-zh-cncontactcommitterrelease-guide-li><input type=checkbox id=m-zh-cncontactcommitterrelease-guide-check>
<label for=m-zh-cncontactcommitterrelease-guide-check><a href=/zh-cn/contact/committer/release-guide/ title="如何准备 Apache Release" class="align-left pl-0 td-sidebar-link td-sidebar-link__section" id=m-zh-cncontactcommitterrelease-guide><span>发版准备</span></a></label><ul class="ul-3 foldable"><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterrelease-guidecommon-li><input type=checkbox id=m-zh-cncontactcommitterrelease-guidecommon-check>
<label for=m-zh-cncontactcommitterrelease-guidecommon-check><a href=/zh-cn/contact/committer/release-guide/common/ title="通用 Release 流程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterrelease-guidecommon><span>通用 Release</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterrelease-guidejava-sdk-li><input type=checkbox id=m-zh-cncontactcommitterrelease-guidejava-sdk-check>
<label for=m-zh-cncontactcommitterrelease-guidejava-sdk-check><a href=/zh-cn/contact/committer/release-guide/java-sdk/ title="Java SDK Release 流程" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterrelease-guidejava-sdk><span>Java SDK Release</span></a></label></li></ul></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterwebsite-guide_dev-li><input type=checkbox id=m-zh-cncontactcommitterwebsite-guide_dev-check>
<label for=m-zh-cncontactcommitterwebsite-guide_dev-check><a href=/zh-cn/contact/committer/website-guide_dev/ class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterwebsite-guide_dev><span>网站向导</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterlabel-an-issue-guide_dev-li><input type=checkbox id=m-zh-cncontactcommitterlabel-an-issue-guide_dev-check>
<label for=m-zh-cncontactcommitterlabel-an-issue-guide_dev-check><a href=/zh-cn/contact/committer/label-an-issue-guide_dev/ title=给问题打标签 class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterlabel-an-issue-guide_dev><span>问题标签</span></a></label></li><li class="td-sidebar-nav__section-title td-sidebar-nav__section without-child" id=m-zh-cncontactcommitterapache-dubbo-page_dev-li><input type=checkbox id=m-zh-cncontactcommitterapache-dubbo-page_dev-check>
<label for=m-zh-cncontactcommitterapache-dubbo-page_dev-check><a href=/zh-cn/contact/committer/apache-dubbo-page_dev/ title="官方 Dubbo 主页的维护" class="align-left pl-0 td-sidebar-link td-sidebar-link__page" id=m-zh-cncontactcommitterapache-dubbo-page_dev><span>官方主页</span></a></label></li></ul></li></ul></li></ul></nav></div></div><main class="col-12 col-md-9 col-xl-8 pl-md-5" role=main><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/zh-cn/contact/>联系社区</a></li><li class=breadcrumb-item><a href=https://cn.dubbo.apache.org/zh-cn/contact/contributor/>Contributor 指南</a></li><li class="breadcrumb-item active" aria-current=page><a href=https://cn.dubbo.apache.org/zh-cn/contact/contributor/new-contributor-guide_dev/ aria-disabled=true class="btn-link disabled">新手向导</a></li></ol></nav><div class=td-content><h1>新贡献者向导</h1><div class=lead>新贡献者向导</div><header class=article-meta></header><p>这篇向导旨在给正在准备向 Dubbo 提交贡献的新手提供指导。</p><h3 id=邮件列表描述>邮件列表描述</h3><p>邮件列表是 Dubbo 官方推荐的讨论方式,所有与 Dubbo 相关的内容都可以在这里讨论,请点击 <a href=https://github.com/apache/dubbo/issues/1393>Issue</a> 了解更多关于邮件列表订阅的内容</p><p>如需订阅如下邮件列表,请参考 <a href=../mailing-list-subscription-guide_dev>邮件列表订阅向导</a></p><ul><li><a href=mailto:dev@dubbo.apache.org>dev@dubbo.apache.org</a>:开发邮件列表,您在使用或者开发 Dubbo 的过程中遇到的任何问题,都可以在这里进行提问。</li><li><a href=mailto:commits@dubbo.apache.org>commits@dubbo.apache.org</a>:所有的提交内容都会推送到这个邮件列表,如果您对 Dubbo 的进展感兴趣,可以订阅这个邮件列表。</li><li><a href=mailto:issues@dubbo.apache.org>issues@dubbo.apache.org</a>:所有的 <a href=https://issues.apache.org/jira/projects/DUBBO/issues>JIRA Issues</a> 和修改信息都会推送到这个邮件列表。Dubbo 社区已经决定使用 GitHub Issues 代替 JIRA Issues,因此大部分 Issues 将由 GitHub Issues 进行跟踪。JIRA Issues 用于跟踪 ASF 相关问题。</li></ul><h3 id=报告问题>报告问题</h3><ul><li>非安全问题直接在 GitHub Issue 中提出,另请参考 <a href=https://github.com/apache/dubbo/blob/master/.github/ISSUE_TEMPLATE/dubbo-issue-report-template.md>Issue Template</a></li><li>安全问题请参考 <a href=../reporting-security-issues_dev>“反馈漏洞”</a></li></ul><h3 id=贡献代码流程>贡献代码流程</h3><p>此贡献流程适用于所有的 Apache Dubbo 社区内容,包括但不限于 dubbo(主干仓库)、dubbo-admin、dubbo-website。</p><p>以下以贡献 dubbo (主干仓库) 为例,详细说明贡献流程。</p><h4 id=1-fork-apachedubbo-项目到您的-github-帐号下>1. <strong>Fork apache/dubbo 项目到您的 GitHub 帐号下</strong></h4><h4 id=2-克隆您-fork-的-dubbo-代码仓库到您本地>2. <strong>克隆您 Fork 的 Dubbo 代码仓库到您本地</strong></h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>git clone <span style=color:#2aa198>${</span><span style=color:#268bd2>your</span> fork dubbo repo address,for example:https://github.com/<span style=color:#2aa198>${</span><span style=color:#268bd2>your</span> github id<span style=color:#2aa198>}</span>/dubbo.git<span style=color:#2aa198>}</span>
</span></span><span style=display:flex><span><span style=color:#b58900>cd</span> dubbo
</span></span></code></pre></div><h4 id=3-添加-apachedubbo-仓库为-upstream-仓库>3. <strong>添加 apache/dubbo 仓库为 upstream 仓库</strong></h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>git remote add upstream https://github.com/apache/dubbo.git
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>git remote -v
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span> origin <span style=color:#2aa198>${</span><span style=color:#268bd2>your</span> fork dubbo repo address<span style=color:#2aa198>}</span> <span style=color:#719e07>(</span>fetch<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span> origin <span style=color:#2aa198>${</span><span style=color:#268bd2>your</span> fork dubbo repo address<span style=color:#2aa198>}</span> <span style=color:#719e07>(</span>push<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span> upstream https://github.com/apache/dubbo.git <span style=color:#719e07>(</span>fetch<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span> upstream https://github.com/apache/dubbo.git <span style=color:#719e07>(</span>push<span style=color:#719e07>)</span>
</span></span><span style=display:flex><span>
</span></span><span style=display:flex><span>git fetch origin
</span></span><span style=display:flex><span>git fetch upstream
</span></span></code></pre></div><h4 id=4-我们的工作以-issue-为驱动认领个-issue或者创建一个-issue-并描述清楚要做什么>4. <strong>我们的工作以 Issue 为驱动,认领个 Issue,或者创建一个 Issue 并描述清楚要做什么。</strong></h4><p>新人推荐标记为: <code>good first issue</code> 的 Issue</p><h4 id=5-选择一个开发的基础分支通常是-master--30--31并基于此创建一个新的本地分支>5. <strong>选择一个开发的基础分支,通常是 master / 3.0 / 3.1,并基于此创建一个新的本地分支</strong></h4><ul><li>3.1 分支是 3.1 版本的开发分支</li><li>3.0 分支是 3.0 版本的开发分支</li><li>master 分支是 2.7 版本的开发分支</li></ul><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span><span style=color:#586e75># 从远程仓库创建分支到本地</span>
</span></span><span style=display:flex><span>git checkout -b up-dev-issue#<span style=color:#2aa198>${</span><span style=color:#268bd2>issue</span>-number<span style=color:#2aa198>}</span> upstream/master
</span></span></code></pre></div><p>为了避免一些不必要的麻烦,我们推荐以 &ldquo;upstream&rdquo; 中的分支为基础创建新的本地分支。
可以以要做的事情的简单描述作为分支名(只要你能看懂就行),通常情况下我们会把 Issue 号包含到分支名中,例如上面的 checkout 命令中的。</p><h4 id=6-在本地新建的开发分支上进行各种修改>6. <strong>在本地新建的开发分支上进行各种修改</strong></h4><p>首先请保证您阅读并正确设置 Dubbo code style,相关内容请阅读 <a href=#%E7%BC%96%E7%A0%81%E8%A7%84%E8%8C%83>编码规范</a></p><p>修改时请保证该本地分支上的修改仅和 Issue 相关,并尽量细化,做到一个分支只修改一件事,一个PR只修改一件事。</p><p>可以在提交注释中添加 &ldquo;#Issue号&rdquo;,将该提交与 Issue 关联。</p><h4 id=7-将您开发完成后的分支上传到您fork的仓库>7. <strong>将您开发完成后的分支,上传到您fork的仓库</strong></h4><div class=highlight><pre tabindex=0 style=color:#93a1a1;background-color:#002b36;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-shell data-lang=shell><span style=display:flex><span>git push origin up-dev-issue#<span style=color:#2aa198>${</span><span style=color:#268bd2>issue</span>-number<span style=color:#2aa198>}</span>
</span></span></code></pre></div><h4 id=8-创建-pull-request>8. <strong>创建 Pull Request</strong></h4><ul><li>参考 <a href=https://github.com/apache/dubbo/blob/master/PULL_REQUEST_TEMPLATE.md>Pull Request Template</a> 中的检查列表</li></ul><p>Dubbo 社区将会 Review 您的 Pull Request,并可能提出修改意见,您可以根据修改意见回到步骤6进行修改,并使用步骤7进行重新提交。</p><h4 id=9-如果没有问题dubbo-社区将会把您的修改合并恭喜您成为-dubbo-的贡献者>9. <strong>如果没有问题,Dubbo 社区将会把您的修改合并,恭喜您成为 Dubbo 的贡献者。</strong></h4><h4 id=特别说明>特别说明:</h4><ul><li>开源项目一般都是以分支的方式工作,每件事情都创建一个分支。</li><li>创建分支时,不要从本地仓库里的分支里创建,而是从指向主仓库的远程仓库创建。</li><li>不要一直在同一个分支工作, 一个分支只做一件事情,不要在同一个分支做多件事情。</li><li>一直在同一分支中修改,提交都会一直在该分支中。这样就会造成每次PR都会带着之前的所有被 merge、未被 merge 的提交。</li><li>一件事情可以是一个 Issue,也可以是一个 Issue 中的部分 (Issue 太大可以拆解)。</li><li>一个分支(一件事情)只提一个PR。</li><li>提了 PR 后,如果 PR 有问题需要修改,可以继续在这个 PR 关联的分支修改提交。在 PR 被 merge 前,向这个分支继提交都会进入这个 PR。</li><li>如果只是想纯更新代码,可以从主仓库提 PR 到你fork的仓库,源选择主仓库里的分支,目标选你 fork 的仓库的分支。</li><li>这种方式更新代码,你 Fork 的仓库中会多一个提交。如果以你 Fork 的仓库中的分支为源创建分支, 这个提交纪录会被带过去并出现在PR中,所以要以主仓库的分支为源创建分支。</li><li>Issue 认领: 在要认领的 Issue 中回复,明确表式你将处理这个 Issue。这样社区的 PMC 和 Committer 会把该 Issue assign 给你。当然认领前先看下这个 Issue 有没有被别人认领了。
为了方便,我们可以把认领的回复统一为: <strong>@i will solve it@</strong>, 当然这不是必须的。</li></ul><h4 id=编码规范>编码规范</h4><p>请按照 <a href=https://github.com/apache/dubbo/blob/master/CONTRIBUTING.md>CONTRIBUTING.md</a> 中的编码规范对自己的代码进行检查。</p><h5 id=代码约定><strong>代码约定</strong></h5><p>我们的代码风格几乎和标准 Java 约定一致(流行IDE的默认设置满足这一点),主要有以下附加限制:</p><ul><li>如果当前行中有超过 120 个字符,则起一个新的行。</li><li>确保所有新的 .java 文件都有一个简单的 JavaDoc 类注释,最好至少有一个关于该类的解释说明。</li><li>将ASF许可注释添加到所有新的 .java 文件(从项目中的现有文件复制)</li><li>请确保没有将 @author 标记添加到您所贡献的文件中,因为 Apache 不使用 @author 标记,其他方式(如 CVS、Git)将公平地记录所有您的贡献。</li><li>为代码添加一些 JavaDoc,如果您更改命名空间,则需要一些 XSD DOC 元素。</li><li>对于新的特征或重要的修复程序,应该添加单元测试。</li><li>如果没有其他人使用您的分支,请将它与 master(或主项目中的其他目标分支)同步。</li><li>当编写提交消息时,请遵循这些约定,如果您正在修复一个现有问题,请在提交消息的末尾添加 Fixes XXX(其中XXX是问题编号)。</li></ul><h5 id=代码风格><strong>代码风格</strong></h5><p>我们提供了 IntelliJ idea 的模版文件 dubbo根目录/codestyle/dubbo_codestyle_for_idea.xml,您可以将它导入到IDE。
如果使用 Eclipse,可以通过参考该文件手动配置。</p><p><strong>代码风格检查:</strong></p><ol><li>安装 checkstyle 插件(IDEA可以在插件市场搜索)</li><li>插件安装好后,在IDEA的settings==>tool==>checkstyle中设置:
<img src=/imgs/dev/checkstyle1.png alt=checkstyle1>
<img src=/imgs/dev/checkstyle2.png alt=checkstyle2>
<img src=/imgs/dev/checkstyle3.png alt=checkstyle3>
<img src=/imgs/dev/checkstyle4.png alt=checkstyle4></li></ol><p><strong>注意事项</strong></p><p>使用 dubbo_codestyle_for_idea.xml 为你的 IDEA 设置代码格式是贡献代码前至关重要的一个步骤,否则你将会无法通过 CI 的代码风格校验,下面几个步骤给你演示了如何配置代码格式:</p><ol><li>进入菜单页 Editor > Code Style</li><li>在 Code Style 页面的 scheme 菜单中点击 manage profiles 选项 在下拉列表中选择 Import Scheme, 接着选择 IntelliJ IDEA code style XML 导入 xml 文件</li><li>输入你的格式名称,方便在不同工程之间进行识别,最后别忘了 ⏎ 来保存更改.
设置完成后,IDEA 会帮助你自动 reformat 代码</li></ol><h3 id=参与发布投票>参与发布投票</h3><p>参与发布投票是一种重要的贡献社区的方式,Dubbo 社区非常欢迎和鼓励任何人参与投票,每当一个版本需要正式发布的时候,会在开发者邮件列表上进行发布投票,只有当投票取得通过之后,才会正式发布,可以参考这个 <a href=https://cwiki.apache.org/confluence/display/INCUBATOR/Incubator+Release+Checklist>检查列表</a> 对源码进行合规性检查。如果有任何问题,可以在开发者邮件列表上提问。</p><div id=pre-footer><h2>反馈</h2><p class=feedback--prompt>此页是否对您有帮助?</p><button class="btn btn-primary mb-4 feedback--yes"></button>
<button class="btn btn-primary mb-4 feedback--no"></button></div><script>const yes=document.querySelector(".feedback--yes"),no=document.querySelector(".feedback--no");document.querySelectorAll(".feedback--link").forEach(e=>{e.href=e.href+window.location.pathname});const sendFeedback=e=>{gtag||console.log("!gtag"),gtag("event","click",{event_category:"Helpful",event_label:window.location.pathname,value:e})},disableButtons=()=>{yes.disabled=!0,yes.classList.add("feedback--button__disabled"),no.disabled=!0,no.classList.add("feedback--button__disabled")};yes.addEventListener("click",()=>{sendFeedback(1),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")}),no.addEventListener("click",()=>{sendFeedback(0),disableButtons(),document.querySelector(".feedback--response").classList.remove("feedback--response__hidden")})</script><br><div class="text-muted mt-5 pt-3 border-top">最后修改 March 1, 2023: <a href=https://github.com/apache/dubbo-website/commit/f2070b3fdd1b7b200db0f8f2a50fb09d7c398a64>Add /zh/ docs aliases (#2336) (f2070b3fdd1)</a></div></div></main><div class="d-none d-xl-block col-xl-2 td-toc d-print-none"><div class="td-page-meta ml-2 pb-1 pt-2 mb-0"><a href=https://github.com/apache/dubbo-website/edit/master/content/zh-cn/contact/contributor/new-contributor-guide_dev.md target=_blank><i class="fa fa-edit fa-fw"></i> 编辑此页</a>
<a href="https://github.com/apache/dubbo-website/new/master/content/zh-cn/contact/contributor/new-contributor-guide_dev.md?filename=change-me.md&amp;value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the+page+%28weight+controls+how+its+ordered+amongst+other+pages+in+the+same+directory%3B+lowest+number+first%29.%0A%2A+Add+a+good+commit+message+at+the+bottom+of+the+page+%28%3C80+characters%3B+use+the+extended+description+field+for+more+detail%29.%0A%2A+Create+a+new+branch+so+you+can+preview+your+new+file+and+request+a+review+via+Pull+Request.%0A" target=_blank><i class="fa fa-edit fa-fw"></i> 创建子页面</a>
<a href="https://github.com/apache/dubbo-website/issues/new?title=%e6%96%b0%e8%b4%a1%e7%8c%ae%e8%80%85%e5%90%91%e5%af%bc" target=_blank><i class="fab fa-github fa-fw"></i> 登记问题</a>
<a href=https://github.com/apache/dubbo/issues/new target=_blank><i class="fas fa-tasks fa-fw"></i> 提交项目问题</a></div><nav id=TableOfContents><ul><li><ul><li><a href=#邮件列表描述>邮件列表描述</a></li><li><a href=#报告问题>报告问题</a></li><li><a href=#贡献代码流程>贡献代码流程</a></li><li><a href=#参与发布投票>参与发布投票</a></li></ul></li></ul></nav></div></div></div></div><footer class="bg-dark py-5 row d-print-none footer-margin-0"><div class="container-fluid mx-sm-5"><div class=row><div class="col-6 col-sm-4 text-xs-center order-sm-2"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Dubbo mailing list archive" aria-label="Dubbo mailing list archive"><a class=text-white target=_blank rel="noopener noreferrer" href=https://lists.apache.org/list.html?dev@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-6 col-sm-4 text-right text-xs-center order-sm-3"><ul class="list-inline mb-0"><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title=GitHub aria-label=GitHub><a class=text-white target=_blank rel="noopener noreferrer" href=https://github.com/apache/dubbo><i class="fab fa-github"></i></a></li><li class="list-inline-item mx-2 h3" data-toggle=tooltip data-placement=top title="Subscribe to mailing list" aria-label="Subscribe to mailing list"><a class=text-white target=_blank rel="noopener noreferrer" href=mailto:dev-subscribe@dubbo.apache.org><i class="fa fa-envelope"></i></a></li></ul></div><div class="col-12 col-sm-4 text-center py-2 order-sm-2"><small class=text-white>&copy; 2024 The Apache Software Foundation. Apache and the Apache feather logo are trademarks of The Apache Software Foundation. 保留所有权利</small></div></div></div></footer><div class="row pt-2 pb-2 footer-margin-0"><div class="container-fluid mx-sm-5"><div class=text-center id=my-footer><img alt=apache_logo src=/imgs/apache_logo.png><ul><li><a href=https://www.apache.org>Foundation</a></li><li><a href=https://www.apache.org/licenses/>License</a></li><li><a href=https://dubbo.apache.org/en/overview/notices/>Security</a></li><li><a href=https://www.apache.org/events/current-event>Events</a></li><li><a href=https://www.apache.org/foundation/sponsorship.html>Sponsorship</a></li><li><a href=https://privacy.apache.org/policies/privacy-policy-public.html>Privacy</a></li><li><a href=https://www.apache.org/foundation/thanks.html>Thanks</a></li></ul></div></div></div><script src=/js/popper.min.js integrity=sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49 crossorigin=anonymous></script><script src=/js/bootstrap.min.js integrity=sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy crossorigin=anonymous></script><script src=/js/main.min.b075178d232d3b0039b3cb6af2fc2e9d90071820167a60f4eea3a79169975ee8.js integrity="sha256-sHUXjSMtOwA5s8tq8vwunZAHGCAWemD07qOnkWmXXug=" crossorigin=anonymous></script><script async src=https://widget.kapa.ai/kapa-widget.bundle.js data-website-id=d763c4f2-f871-400b-aeca-d986c4af73c2 data-project-name="Apache Dubbo" data-project-color=#E8442E data-button-text="Ask AI" data-search-mode-enabled=true data-modal-open-on-command-k=true data-modal-disclaimer="The AI supports multiple languages, but it may not be accessible in China due to recaptcha, a proxy is required." data-project-logo=https://pbs.twimg.com/profile_images/1011849068283191302/FJbH5vbF_400x400.jpg data-modal-example-questions="What is Apache Dubbo?,How to run Apache Dubbo?" data-button-position-top data-button-position-right=20px data-button-position-bottom=200px data-button-position-left></script><script>(function(e,t,n,s){e[s]=e[s]||[];var a=t.getElementsByTagName(n)[0],i=t.createElement(n);i.async=!0,i.id="beacon-aplus",i.setAttribute("exparams","userid=&aplus&sidx=aplusSidex&ckx=aplusCkx"),i.src="//g.alicdn.com/alilog/mlog/aplus_v2.js",i.crossorigin="anonymous",a.parentNode.insertBefore(i,a)})(window,document,"script","aplus_queue"),function(e){var t=e.createElement("script");t.type="text/javascript",t.async=!0,t.src="//g.alicdn.com/aes/??tracker/3.3.4/index.js,tracker-plugin-pv/3.0.5/index.js,tracker-plugin-event/3.0.0/index.js,tracker-plugin-autolog/3.0.3/index.js,tracker-plugin-survey/3.0.3/index.js,tracker-plugin-jserror/3.0.3/index.js,tracker-plugin-resourceError/3.0.3/index.js",t.onload=function(){window.AES_CONFIG=window.AES_CONFIG||{env:"prod"},window.aes=new AES({pid:"zN245h",user_type:6}),window.AESPluginAutologConfig={exposure:"auto"},window.AEMPluginInstances=[aes.use(AESPluginPV,window.AESPluginPVConfig||{enableHistory:!0}),aes.use(AESPluginEvent,window.AESPluginEventConfig||{}),aes.use(AESPluginSurvey,window.AESPluginEventConfig||{}),aes.use(AESPluginAutolog,window.AESPluginAutologConfig||{}),aes.use(AESPluginJSError,window.AESPluginJSError||{}),aes.use(AESPluginResourceError,window.AESPluginResourceError||{})]},setTimeout(function(){e.getElementsByTagName("body")[0].appendChild(t)},800)}(document)</script></body></html>