戰(zhàn)指南:從 Fork 到 Pull Request 的首次開(kāi)源貢獻(xiàn)完整流程)
文檔教程開(kāi)源治理【免費(fèi)下載鏈接】first-contributions? Help beginners to contribute to open source projects項(xiàng)目地址https://gitcode.com/gh_mirrors/fi/first-contributions點(diǎn)擊查看免費(fèi)下載本指南以開(kāi)源倉(cāng)庫(kù) first-contributions 的核心入門(mén)文檔為主體系統(tǒng)講解初學(xué)者完成第一次開(kāi)源貢獻(xiàn)所需的完整 Git 工作流Fork 倉(cāng)庫(kù) → 克隆到本地 → 創(chuàng)建分支 → 修改并提交 → 推送遠(yuǎn)程 → 提交 Pull Request。讀完本文你將能獨(dú)立完成一次真實(shí)的開(kāi)源貢獻(xiàn)并掌握分支管理、遠(yuǎn)程同步與沖突處理等后續(xù)進(jìn)階技能。文檔背景與本指南的定位本文基于倉(cāng)庫(kù)中的入門(mén)文檔 README.pcm.md 展開(kāi)。該文檔是項(xiàng)目主 README 的尼日利亞皮欽英語(yǔ)Nigerian Pidgin翻譯版本與 主 README 內(nèi)容完全對(duì)應(yīng)項(xiàng)目定位是幫助初學(xué)者以最簡(jiǎn)單的方式完成第一次開(kāi)源貢獻(xiàn)項(xiàng)目描述為 Help beginners to contribute to open source projects。倉(cāng)庫(kù)根目錄的 Contributors.md 已有近六千行貢獻(xiàn)者名單每位貢獻(xiàn)者的名字正是通過(guò)本文將要講解的流程逐步添加進(jìn)去的——它本身就是這套工作流最好的運(yùn)行示例。文章中所有命令均以終端操作為主。如果你不習(xí)慣命令行倉(cāng)庫(kù)還提供了使用圖形界面工具的教程可在文章末尾的「圖形界面工具」一節(jié)查看。開(kāi)始之前準(zhǔn)備 Git 環(huán)境整個(gè)流程的第一步是確認(rèn)本機(jī)已安裝 Git。在終端執(zhí)行g(shù)it --version如果提示找不到命令需要先完成 Git 的安裝與基礎(chǔ)配置。安裝完成后建議先用git config配置用戶(hù)名和郵箱因?yàn)樘峤籧ommit會(huì)記錄作者信息。關(guān)于用戶(hù)信息、默認(rèn)編輯器等配置項(xiàng)的詳細(xì)說(shuō)明可參考倉(cāng)庫(kù)文檔 configuring-git.md。第一步Fork 倉(cāng)庫(kù)進(jìn)入 first-contributions 倉(cāng)庫(kù)頁(yè)面點(diǎn)擊頁(yè)面頂部的Fork按鈕。Fork 的本質(zhì)是在你自己的賬號(hào)下創(chuàng)建一份該倉(cāng)庫(kù)的完整副本。這一步之后你會(huì)擁有一個(gè)屬于自己的first-contributions倉(cāng)庫(kù)后續(xù)所有修改都發(fā)生在你的副本上不會(huì)影響原始倉(cāng)庫(kù)。第二步克隆倉(cāng)庫(kù)到本地克隆clone是把遠(yuǎn)程倉(cāng)庫(kù)的內(nèi)容下載到本機(jī)。操作如下登錄 GitHub打開(kāi)你剛才 Fork 出來(lái)的倉(cāng)庫(kù)點(diǎn)擊頁(yè)面上的Code按鈕建議切換到 SSH 標(biāo)簽頁(yè)點(diǎn)擊復(fù)制按鈕把倉(cāng)庫(kù)地址復(fù)制到剪貼板打開(kāi)終端執(zhí)行g(shù)it clone命令git clone url wey you just copy其中url wey you just copy去掉引號(hào)替換為剛復(fù)制的地址即你 Fork 出來(lái)的倉(cāng)庫(kù)地址。例如git clone gitgithub.com:this-is-you/first-contributions.git這里的this-is-you是你的 GitHub 用戶(hù)名。執(zhí)行成功后遠(yuǎn)程倉(cāng)庫(kù)的全部?jī)?nèi)容就被復(fù)制到了本機(jī)。如果想在本地查看本倉(cāng)庫(kù)鏡像的代碼而不進(jìn)行貢獻(xiàn)流程也可以直接克隆鏡像地址git clone https://gitcode.com/gh_mirrors/fi/first-contributions.git。第三步創(chuàng)建分支先進(jìn)入倉(cāng)庫(kù)目錄如果還沒(méi)進(jìn)去的話(huà)cd first-contributions然后使用git switch命令創(chuàng)建一個(gè)新分支git switch -c your-new-branch-name例如git switch -c add-desmond-ezo-ojile分支是 Git 的核心概念之一它讓你在獨(dú)立的開(kāi)發(fā)線(xiàn)上修改代碼而不會(huì)干擾主分支main。這也是后續(xù) Pull Request 能夠「按分支評(píng)審合并」的基礎(chǔ)。兼容性提示如果執(zhí)行g(shù)it switch時(shí)出現(xiàn)類(lèi)似 Git:switchis not a git command 的錯(cuò)誤說(shuō)明你的 Git 版本較舊。此時(shí)改用等價(jià)的git checkout命令即可git checkout -b your-new-branch-name此后備方案詳見(jiàn)主文檔 README.md 中的說(shuō)明。第四步修改文件并提交現(xiàn)在開(kāi)始做出你的實(shí)際貢獻(xiàn)。用文本編輯器打開(kāi)倉(cāng)庫(kù)根目錄的 Contributors.md 文件把你的名字添加進(jìn)去。注意不要加在文件開(kāi)頭或結(jié)尾而是加在文件中間任意位置這是為了讓多位貢獻(xiàn)者的提交減少?zèng)_突概率。保存文件后回到項(xiàng)目目錄執(zhí)行g(shù)it status你會(huì)看到該文件已被標(biāo)記為有變更git statusgit status會(huì)列出工作區(qū)中所有改動(dòng)是后續(xù)每個(gè)步驟前都建議執(zhí)行的狀態(tài)檢查命令。接下來(lái)把改動(dòng)添加到暫存區(qū)staging area使用git addgit add Contributors.mdgit add只暫存你明確指定的文件這給了你精確控制「哪些改動(dòng)進(jìn)入下一次提交」的能力。然后提交這些改動(dòng)git commit -m Add your-name to Contributors list把your-name替換成你自己的名字。-m參數(shù)用于附加提交信息一條清晰、描述性的提交信息是開(kāi)源協(xié)作的基本禮儀。第五步推送到 GitHub提交只發(fā)生在本地接下來(lái)要把本地分支推送到你的 GitHub 倉(cāng)庫(kù)git push -u origin your-branch-name把your-branch-name替換為你第三步創(chuàng)建的分支名。-u參數(shù)會(huì)把本地分支與遠(yuǎn)程分支建立跟蹤關(guān)系此后在該分支上直接執(zhí)行g(shù)it push即可無(wú)需再指定遠(yuǎn)程和分支名。推送失敗認(rèn)證錯(cuò)誤處理如果推送時(shí)遇到認(rèn)證錯(cuò)誤最常見(jiàn)的情形是 GitHub 自 2021 年 8 月 13 日起移除了密碼認(rèn)證錯(cuò)誤信息通常形如remote: Support for password authentication was removed on August 13, 2021. Please use a personal access token instead. fatal: Authentication failed for https://github.com/your-username/first-contributions.git/解決辦法是按 GitHub 官方指引為賬號(hào)生成并配置 SSH 密鑰SSH key以 SSH 方式認(rèn)證。此外可用以下命令檢查當(dāng)前的遠(yuǎn)程地址配置git remote -v如果輸出類(lèi)似于origin https://github.com/your-username/your_repo.git (fetch) origin https://github.com/your-username/your_repo.git (push)說(shuō)明仍然走 HTTPS 方式、會(huì)反復(fù)提示輸入用戶(hù)名密碼。可改用 SSH 地址git remote set-url origin gitgithub.com:your-username/your_repo.git這樣即可避免后續(xù)的認(rèn)證報(bào)錯(cuò)。第六步提交 Pull Request推送成功后回到你在 GitHub 上的倉(cāng)庫(kù)頁(yè)面頁(yè)面上會(huì)出現(xiàn)一個(gè)Compare pull request按鈕點(diǎn)擊它然后提交 Pull Request。Pull Request簡(jiǎn)稱(chēng) PR是開(kāi)源協(xié)作的關(guān)鍵環(huán)節(jié)它向原始倉(cāng)庫(kù)的所有者發(fā)出「請(qǐng)合并我分支上的這些改動(dòng)」的請(qǐng)求。提交后項(xiàng)目維護(hù)者會(huì)審查你的改動(dòng)并合并到主分支合并完成后你會(huì)收到一封變更已合并的通知郵件。至此你已完整走通了開(kāi)源貢獻(xiàn)的標(biāo)準(zhǔn)流程fork → clone → edit → pull request。這個(gè)四步工作流在幾乎所有 GitHub 協(xié)作項(xiàng)目中都會(huì)反復(fù)遇到。貢獻(xiàn)完成之后進(jìn)階主題第一次貢獻(xiàn)只是起點(diǎn)。倉(cāng)庫(kù)在 additional-material.md 中整理了一批進(jìn)階 Git 場(chǎng)景以下兩個(gè)與日常協(xié)作關(guān)系最密切保持 Fork 與上游倉(cāng)庫(kù)同步隨著項(xiàng)目持續(xù)演進(jìn)你 Fork 的倉(cāng)庫(kù)會(huì)落后于原始倉(cāng)庫(kù)。開(kāi)源協(xié)作中常見(jiàn)「三角工作流」原始公開(kāi)倉(cāng)庫(kù) → 你的 GitHub Fork → 你的本地倉(cāng)庫(kù)。同步的基本思路是先把原始倉(cāng)庫(kù)稱(chēng)為upstream的最新內(nèi)容拉到本地再推送到你的 Fork。首先為本地倉(cāng)庫(kù)添加上游遠(yuǎn)程只需配置一次git remote add upstream https://github.com/firstcontributions/first-contributions.git接著切換到 main 分支可用git status第一行確認(rèn)當(dāng)前分支git checkout main然后拉取上游最新版本并變基到本地 main 分支git fetch upstream git rebase upstream/main最后推送到你的 Fork即名為origin的遠(yuǎn)程git push origin main如果想一步完成「拉取并合并上游 main」的操作可以直接使用git pull upstream main建議在 GitHub 提示「你的分支落后于上游 N 個(gè)提交」時(shí)執(zhí)行上述同步流程。完整說(shuō)明見(jiàn) keeping-your-fork-synced-with-this-repository.md。解決合并沖突當(dāng)不同分支修改了同一處內(nèi)容、Git 無(wú)法自動(dòng)合并時(shí)就會(huì)產(chǎn)生合并沖突。沖突文件中會(huì)插入如下標(biāo)記 HEAD 你的分支上的改動(dòng) 來(lái)自其他分支的改動(dòng) branch-name其中 HEAD表示當(dāng)前分支的改動(dòng)是分隔線(xiàn) branch-name表示另一個(gè)分支的改動(dòng)。解決步驟是用git status定位沖突文件位于 Unmerged paths 列表→ 編輯文件、保留期望的改動(dòng)并刪除全部沖突標(biāo)記 → 用git add filename標(biāo)記已解決 → 最后提交合并。詳細(xì)流程見(jiàn) resolving-merge-conflicts.md。其他常見(jiàn)場(chǎng)景索引倉(cāng)庫(kù)的進(jìn)階文檔還覆蓋了以下高頻場(chǎng)景均位于docs/additional-material/git_workflow_scenarios/目錄下修改最近一次提交amending-a-commit.md調(diào)整提交信息或補(bǔ)充遺漏的改動(dòng)撤銷(xiāo)已推送的提交reverting-a-commit.md撤銷(xiāo)/重置本地提交undoing-a-commit.md將多個(gè)提交壓縮為一個(gè)squashing-commits.md常用于響應(yīng)評(píng)審者「把提交合并成一個(gè)并附上信息性提交信息」的要求移除文件與刪除分支removing-a-file.md、removing-branch-from-your-repository.md。圖形界面工具如果你更習(xí)慣圖形化操作而非命令行倉(cāng)庫(kù)在docs/gui-tool-tutorials/下提供了多套工具的入門(mén)教程例如 GitHub Desktop、Visual Studio Code、GitKraken 等覆蓋了 Windows、macOS 等不同平臺(tái)。結(jié)語(yǔ)一份可復(fù)用的貢獻(xiàn)檢查清單回顧全文一次標(biāo)準(zhǔn)貢獻(xiàn)可以濃縮為六步檢查清單Fork在原始倉(cāng)庫(kù)頁(yè)面點(diǎn)擊 Fork獲得自己的副本Clone復(fù)制 Fork 地址并git clone到本地Branchgit switch -c your-branch-name創(chuàng)建獨(dú)立分支舊版 Git 用git checkout -bCommit修改 Contributors.md →git status檢查 →git add Contributors.md→git commit -m Add your-name to Contributors listPushgit push -u origin your-branch-name遇認(rèn)證錯(cuò)誤時(shí)改用 SSH key 或git remote set-url調(diào)整遠(yuǎn)程地址Pull Request點(diǎn)擊Compare pull request提交 PR等待維護(hù)者審查合并。這套流程不僅適用于 first-contributions 倉(cāng)庫(kù)也是所有 GitHub 開(kāi)源項(xiàng)目通用的協(xié)作范式。完成首次貢獻(xiàn)后建議繼續(xù)閱讀倉(cāng)庫(kù)中的 進(jìn)階文檔 與各語(yǔ)言版本包括中文版 README逐步從「會(huì)提 PR」成長(zhǎng)為熟練的開(kāi)源貢獻(xiàn)者。贊分享文檔教程開(kāi)源治理【免費(fèi)下載鏈接】first-contributions? Help beginners to contribute to open source projects項(xiàng)目地址https://gitcode.com/gh_mirrors/fi/first-contributions點(diǎn)擊查看免費(fèi)下載相關(guān)推薦first-contributions 實(shí)戰(zhàn)指南從 Fork 到 Pull Request 的首次開(kāi)源貢獻(xiàn)完整流程first contributions 實(shí)戰(zhàn)指南從 Fork 到 Pull Request 的首次開(kāi)源貢獻(xiàn)完整流程 導(dǎo)讀 本文基于 first contrib文檔教程開(kāi)源治理first-contributions 首次開(kāi)源貢獻(xiàn)實(shí)戰(zhàn)從 Fork 到 Pull Request 的完整指南first contributions 首次開(kāi)源貢獻(xiàn)實(shí)戰(zhàn)從 Fork 到 Pull Request 的完整指南 本文以 GitHub 加速計(jì)劃 fi 鏡像中的文檔教程開(kāi)源治理first-contributions 首次開(kāi)源貢獻(xiàn)實(shí)戰(zhàn)指南從 Fork 到 Pull Request 的完整 Git 流程first contributions 首次開(kāi)源貢獻(xiàn)實(shí)戰(zhàn)指南從 Fork 到 Pull Request 的完整 Git 流程 本篇指南以 first cont文檔教程開(kāi)源治理創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考