你已經(jīng)找到了你喜愛(ài)的項(xiàng)目,也已準(zhǔn)備好貢獻(xiàn)了,迫不及待、躍躍欲試了。好吧!以下就是帶領(lǐng)你如何以正確的姿勢(shì)作貢獻(xiàn)。
無(wú)論你處于什么樣的目的:僅僅是一次性的貢獻(xiàn),亦或是永久性的加入社區(qū),都得和他人進(jìn)行溝通和交往,這是你要在開(kāi)源圈發(fā)展必須修煉的技能。
![]()
[作為一名新手,] 我很快的就意識(shí)到,我若是要關(guān)閉一條 issue 時(shí),我不得不問(wèn)更多的問(wèn)題。我瀏覽了代碼庫(kù),一旦我覺(jué)得有什么問(wèn)題的時(shí)候,我就得需要更多的指點(diǎn),瞧! 在我得到所有的所需要的信息后,我就可以解決這個(gè)問(wèn)題!
— @shubheksha , 一名菜鳥(niǎo)進(jìn)入開(kāi)源世界的坎坷之旅
在你開(kāi)啟一個(gè) issue 或 PR 之前,或者是在聊天室問(wèn)問(wèn)題之前,請(qǐng)牢記下面所列出的幾點(diǎn)建議,會(huì)讓你的工作更加的高效。
給出上下文 以便于讓其他人能夠快速的理解。比方說(shuō)你運(yùn)行程序時(shí)遇到一個(gè)錯(cuò)誤,要解釋你是如何做的,并描述如何才能再現(xiàn)錯(cuò)誤現(xiàn)象。又比方說(shuō)你是提交一個(gè)新的想法,要解釋你為什么這么想,對(duì)于項(xiàng)目有用處嗎(不僅僅是只有你!)
???? “當(dāng)我做 Y 的時(shí)候 X 不能工作”
???? “X 出問(wèn)題! 請(qǐng)修復(fù)它。”
在進(jìn)一步行動(dòng)前,做好準(zhǔn)備工作。 不知道沒(méi)關(guān)系,但是要展現(xiàn)你嘗試過(guò)、努力過(guò)。在尋求幫助之前,請(qǐng)確認(rèn)閱讀了項(xiàng)目的 README、文檔、問(wèn)題(開(kāi)放的和關(guān)閉的)、郵件列表,并搜索了網(wǎng)絡(luò)。當(dāng)你表現(xiàn)出很強(qiáng)烈的求知欲的時(shí)候,人們是非常欣賞這點(diǎn)的,會(huì)很樂(lè)意地幫助你。
???? “我不確定 X 是如何實(shí)現(xiàn)的,我查閱了相關(guān)的幫助文檔,然而毫無(wú)所獲。”
???? “我該怎么做 X ?”
保持請(qǐng)求內(nèi)容短小而直接。 正如發(fā)送一份郵件,每一次的貢獻(xiàn),無(wú)論是多么的簡(jiǎn)單,都是需要他人去查閱的。很多項(xiàng)目都是請(qǐng)求的人多,提供幫助的人少。相信我,保持簡(jiǎn)潔,你能得到他人幫助的機(jī)會(huì)會(huì)大大的增加。
???? “我很樂(lè)意寫(xiě) API 的教程?!?/em>
???? ” 有一天我駕駛汽車(chē)行駛在高速公路上,在某個(gè)加油站加油的時(shí)候,突發(fā)奇想,我們應(yīng)該這么做,不過(guò)在我進(jìn)一步解釋之前,我先和大家展示一下。。。”
讓所有的溝通都是在公開(kāi)場(chǎng)合下進(jìn)行。 哪怕是很不起眼的小事,也不要去給維護(hù)者發(fā)私信,除非是你要分享一些敏感信息(諸如安全問(wèn)題或嚴(yán)重的過(guò)失)。你若能夠保持談話(huà)是公開(kāi)的,很多人可以在你們交換的意見(jiàn)中學(xué)習(xí)和受益。
???? (評(píng)論) “@維護(hù)者 你好!我們?cè)撊绾翁幚磉@個(gè) PR?”
???? (郵件) “你好,非常抱歉給發(fā)信,但是我實(shí)在很希望你能看一下我提交的 PR?!?/em>
大膽的提問(wèn)(但是要謹(jǐn)慎!)。 每個(gè)人參與社區(qū),開(kāi)始的時(shí)候都是新手,哪怕是非常有經(jīng)驗(yàn)的貢獻(xiàn)者也一樣,在剛進(jìn)入一個(gè)新的項(xiàng)目的時(shí)候,也是新手。出于同樣的原因,甚至長(zhǎng)期維護(hù)人員并不總是熟悉一個(gè)項(xiàng)目的每一部分。給他們同樣的耐心,你也會(huì)得到同樣的回報(bào)。
???? “感謝查看了這個(gè)錯(cuò)誤,我按照您的建議做了,這是輸出結(jié)果?!?/em>
???? “你為什么不修復(fù)我的問(wèn)題?這難道不是你的項(xiàng)目嗎?”
尊重社區(qū)的決定。 你的想法可能會(huì)和社區(qū)的優(yōu)先級(jí)、愿景等有差異,他們可能對(duì)于你的想法提供了反饋和最后決定的理由,這時(shí)你應(yīng)該去積極的討論,并尋求妥協(xié)的辦法,維護(hù)者必須慎重的考慮你的想法。但是如果你實(shí)在是不能同意社區(qū)的做法,你可以堅(jiān)持下去!繼續(xù)維護(hù)自己的分支,或者另起爐灶。
???? “你不能支持我的用例,我很失望,但是你的解釋僅僅是對(duì)一小部分用戶(hù)起作用,我理解為什么。感謝你的耐心傾聽(tīng)?!?/em>
???? “你為什么不支持我的用例?這是不可接受的!”
最重要的是,保持優(yōu)雅 開(kāi)源社區(qū)有來(lái)自世界各地的協(xié)作者,所以跨語(yǔ)言、文化、地理位置和時(shí)區(qū)的情況下會(huì)丟失上下文語(yǔ)境。另外,書(shū)面交流使得傳達(dá)語(yǔ)氣或情緒變得更加困難。對(duì)話(huà)過(guò)程中善意地理解對(duì)方的意圖、禮貌地反駁他人的想法,詢(xún)問(wèn)更多的上下文語(yǔ)境,或進(jìn)一步澄清你的立場(chǎng)都是好事。我們要讓互聯(lián)網(wǎng)變得更加美好。
在正式開(kāi)始之前,做一些快速的檢查項(xiàng),以確保沒(méi)有人討論過(guò)你的想法??匆槐轫?xiàng)目的 README、問(wèn)題(開(kāi)放的和關(guān)閉的都算)、郵件列表、Stack Overflow。不需去花好幾個(gè)小時(shí)去全部折騰一遍,但是使用幾個(gè)關(guān)鍵的詞匯來(lái)搜索一下是必要的。
如果你沒(méi)有找到和你想法一樣的內(nèi)容,你就可以繼續(xù)了。如果項(xiàng)目是在 GitHub 上的話(huà),你可以通過(guò)開(kāi)啟一個(gè) issue 或 PR:
在你創(chuàng)建 issue 和 PR 之前,請(qǐng)檢查項(xiàng)目的貢獻(xiàn)者文檔(文件名通常叫做 CONTRIBUTING,或者就直接包含在README中),找一些你需要的較具體的東西,例如,他們會(huì)要求你遵循某個(gè)模版,或者是要求你使用某個(gè)測(cè)試。
如果你做的是一個(gè)非常實(shí)際的貢獻(xiàn),在正式開(kāi)啟之前,先創(chuàng)建一個(gè) issue。Watch 這個(gè)項(xiàng)目是很有幫助的(在 GitHub,點(diǎn)擊 “Watch” ,所有的對(duì)話(huà)都會(huì)通知你),要讓社區(qū)的成員們知道你要做的工作,免得你做了之后,再讓他們知道,他們不同意,就浪費(fèi)了。
![]()
你能夠從單個(gè)的項(xiàng)目學(xué)習(xí)到 很多 ,只要你踴躍的去使用,在GitHub上密切觀察項(xiàng)目,并閱讀每一個(gè) issue 和 PR。
— @gaearon 參與項(xiàng)目
你應(yīng)該在遇到下列情況下,去創(chuàng)建一個(gè) issue:
在 issue 的溝通中幾點(diǎn)實(shí)用的技巧:
在下面的情形時(shí),請(qǐng)你務(wù)必使用PR:
一個(gè) PR 并不代表著工作已經(jīng)完成。它通常是盡早的開(kāi)啟一個(gè) PR,是為了其他人可以觀看或者給作者反饋意見(jiàn)。只需要在子標(biāo)題標(biāo)記為”WIP”(正在進(jìn)行中)。作者可以在后面添加很多評(píng)論。
如果說(shuō)項(xiàng)目是托管在 GitHub 上的,以下是我們總結(jié)出的提交 PR 的建議:
如果這是你第一次提交 PR??梢詾g覽 提交 PR 的文檔,這是 @kentcdodds 專(zhuān)門(mén)為初次創(chuàng)建 PR 的人寫(xiě)的公開(kāi)的資料。
更多建議: