开源软件正在蓬勃发展。大型公司正在构建基于开放协作的软件,享受社区广泛采用的诸多好处。免费和开源软件凭借其将来自世界各地的人们聚集在一起并根据兴趣结合他们的努力和技能的能力而令人惊叹。
也就是说,由于我们来自不同的背景,因此值得花点时间反思我们如何一起工作。你在与他人合作时表现出的方式有时会影响你的工作是否会被合并、是否有人会处理你的问题,或者在某些情况下,你将来可能被阻止参与代码库的原因。这篇文章旨在尽可能地指导人们如何使这些沟通顺利进行。以下列出了开源中的礼仪要点,以帮助你在社区中度过更愉快的时光并为使其变得更好而做出贡献。
针对维护者
- 使用“需要帮助”或“新手友好”等标签来指导人们解决他们可以参与的问题,如果他们刚接触该项目。
- 在运行基准测试时,向框架/库等的作者展示你将要运行的基准测试代码,然后再运行它。允许他们提交 PR(可以设置截止日期)。这样,当你的基准测试运行时,你就知道他们已经批准了你的基准测试,并且它尽可能地公平。这还可以解决诸如对开发环境而不是生产环境进行基准测试或一些用户错误之类的问题。
- 当你请求某人提供帮助或将问题标记为需要帮助,并且有人提交了 PR 时,如果你决定不合并,请写一个评论解释你关闭它的原因。否则,这会不尊重他们的时间,因为他们是在响应你的号召。我甚至会说,在你关闭或合并任何 PR 时,评论一下原因或表示感谢会更好。
- 不要关闭来自活跃贡献者的 PR 并自己重新实现相同的功能。就是…不要这样做。
- 如果在一个问题上发生了人身攻击的争吵,尽快将其限制在核心维护者范围内。锁定该问题,并在必要时执行行为准则。
- 制定行为准则并使其存在清晰可见。你可以考虑使用 贡献者公约 行为准则。GitHub 现在还提供了一些基本模板,方便集成行为准则。
针对用户
- 在询问新功能或提交错误报告之前,感谢项目通常会受到赞赏。
- 在打开问题时,如果可能,请使用在线代码编辑器(如 CodePen 或 CodeSandbox)创建一个小型、隔离、简单的错误重现,如果不行,请使用 GitHub 仓库。此过程可能会帮助你发现潜在的问题(或意识到这不是项目的问题)。它也将使维护者更容易帮助你解决问题。
- 在打开问题时,请提出解决问题的方案。花几分钟时间进行一些挖掘。这篇博文 提供了一些深入了解源代码的建议。如果你不确定,请说明你不知道该怎么做。
- 在打开问题时,如果你无法自己解决,请说明这一点。预期是你解决你提出的问题。如果其他人解决了,那就是他们给你的礼物(在这种情况下,你应该表达适当的感激之情)。
- 不要提交诸如“这个项目还有人维护吗?”之类的问题。这样的评论是对他们投入时间的侮辱,它暗示着仅仅因为他们需要休息、正在处理其他事情、父亲去世或有了孩子或其他无数的人为原因而没有随时随地响应代码请求,项目就不再有效了。询问未来是否有路线图,或者根据过去的提交记录判断维护是否足够,这完全是可以的。对免费为你创造东西的人咄咄逼人是不对的。
- 如果有人出于尊重拒绝了你的 PR,因为虽然代码有效,但这不是他们希望项目发展方向,请不要继续在 PR 上发表评论。此时,如果你强烈需要该功能,最好是 fork 项目。
- 当你希望向你并非核心贡献者的项目提交一个非常大的 PR 时,最好通过问题询问你希望采取的方向是否有意义。这也意味着你的 PR 更可能被合并,因为你已经提前告知他们并传达了计划。更好的是,将其分解成更小的 PR,以便一次不必理解太多内容。
- 避免认为理所应当。项目的维护者并不欠你任何东西。当你开始使用该项目时,你就有了帮助维护它的责任。如果你不喜欢项目的维护方式,请在提供建议和提供帮助以改善这种情况时保持尊重。如果你强烈认为这不是你个人会采取的方向,你可以随时 fork 项目自己进行开发。
- 在项目上做任何事情之前,请熟悉贡献者指南,这些指南通常位于仓库根目录下的 CONTRIBUTING.md 文件中。如果不存在,请提交问题询问你是否可以帮助创建它。
最终想法
这些技巧的首要主题是礼貌、尊重和友善。开源对我们行业的价值是不可估量的。我们可以通过遵循一些简单的礼仪规则,让它成为每个人都更好的地方。请记住,项目的维护者通常是在业余时间进行维护。此外,不要忘记项目的使用者有时是软件世界的新手。在沟通和合作时,我们应该牢记这一点。通过这样做,我们可以使开源社区变得更好。
从我的两位偶像那里读到这篇文章真是太酷了。我以及其他人如何沟通代码是我经常思考的事情。
这篇文章让我以新的方式思考开源项目中的沟通。
作为一名维护者,我之前错误地做过上面列出的一些事情——这并非有意而为之,阅读这篇文章帮助我反思了自己的错误。我迫切想知道我应该做些什么才能让所有人的体验都变得更好。
你们两位(或其他人)能否针对在开源项目中进行沟通时**应该做什么**提供一些建议?——也许甚至可以在**不应该做什么**的下方以子列表项的形式写出应该做什么?
再次感谢!我一定会牢记这篇文章的内容。
嗨,Jeff!
感谢你的光临。维护者部分只有一条关于不应该做什么的要点,那就是不要关闭来自活跃维护者的 PR 并自己重新实现它。你指的是需要澄清的那一条吗?
“PR”是什么意思?
“允许他们提交 PR(可以设置截止日期)”…
“当你请求某人提供帮助或将问题标记为需要帮助,并且有人提交了 PR 时,”…
“在你关闭任何 PR 时,评论一下原因会更好”…
嗨,Roger!
抱歉,PR 代表“pull request”(拉取请求)。这是 GitHub 上一篇详细解释拉取请求的文章:https://help.github.com/articles/about-pull-requests/,希望对你有帮助。
祝好!
嗨,Sarah,
感谢你的回复,感谢你澄清“只有一条要点”!那**正是**我需要澄清的那一条。
我错过了那句话中的一个关键词,**活跃**。我曾以第一次贡献者的身份,在另一个 PR 中提交了一些与他们的工作类似的内容。这么做的原因有很多,但没有一个是出于无礼。
有哪些方法可以帮助第一次为项目做出贡献的用户确保他们的 PR 准备就绪?
在提出这个问题时,我想到了一些方法,我也很想知道你的想法。
再次感谢!
好问题!你完全正确,这句话中一个非常重要的词是**活跃**,Kent 和我实际上反复讨论了如何正确地措辞,因为这是一个重要的部分。正如你所猜想的那样,这种措辞之所以重要,主要是因为如果某人过了一段时间没有回复,而你一直在等待他们,那么他们就不再活跃,并且此要点可能不再适用。
如果他们很活跃,尝试提交他们的工作确实很重要,因为这会让他们获得工作的认可。重新实现他们已经完成的事情可能会让人感觉缺乏认可,而当某人刚刚起步时,这一点非常重要。
如果他们的拉取请求几乎是你想要的,但又不是完全一样,这就是事情变得棘手的地方,我认为这可能就是你问题的关键所在。你有几个选择。
1. 你可以对 PR 进行多次审查,并帮助他们更新和编辑它,使其达到正确的状态。这需要更多的时间和精力。你可能可以自己更快地完成,但想想这如何扩展——如果你教会这个人如何解决问题,你可能会发现他们能够帮助维护越来越多的事情。我们都曾经是学习者,这以一种可能将来对你有所回报的方式回馈了社会。
2. 如果你没有时间与他们一起逐步完成事情,你可以合并 PR,然后在其基础上进行修改,以做出你认为必要的更改使其达到状态。你甚至可以与他们一起提交,这很有帮助,因为你可以一次性完成所有操作。
当然,其他人肯定对此有自己的想法,如果这个建议不符合你的需求,那绝对没问题!我认为主要的是,如果你关闭了他们的 PR 并且他们仍然积极参与,最好给他们一个原因,这样他们就不会疑惑为什么你在没有给他们任何功劳的情况下重新实现了它。这可以避免“酸葡萄”心理,并鼓励他们在未来继续做出贡献。
正如我在我的面试中多次说过的那样,我感谢您为我的公司所做的一切。
“不要关闭来自活跃贡献者的 PR 并自己重新实现相同的内容。 不要这样做。”
我经常看到这种情况,这真的很让我恼火,因为他们做了工作,因此应该得到相应的认可。