
簡(jiǎn)介面向PyCharm初學(xué)者的Git配置圖文教程以PDF單文件方式整理幫助開(kāi)發(fā)者解決在集成開(kāi)發(fā)環(huán)境內(nèi)使用Git版本控制、克隆遠(yuǎn)程倉(cāng)庫(kù)與管理分支的常見(jiàn)困惑。包內(nèi)僅收1個(gè)PDF文檔大小僅257KB內(nèi)容緊湊適合放在手邊隨時(shí)對(duì)照練習(xí)。教程先從Git客戶端安裝與可執(zhí)行文件路徑配置入手再依次說(shuō)明在PyCharm中指定git.exe、填入以.git結(jié)尾的倉(cāng)庫(kù)地址完成克隆、借助藍(lán)紅黃顏色快速識(shí)別新增刪除與修改、創(chuàng)建新分支并實(shí)現(xiàn)多版本切換等關(guān)鍵操作全程配合界面截圖與演示結(jié)果步驟清晰直觀。目前已有6731人學(xué)習(xí)瀏覽特別適合剛接觸PyCharm的Python開(kāi)發(fā)者和希望將代碼版本管理統(tǒng)一放進(jìn)IDE的團(tuán)隊(duì)新手。通過(guò)這份圖文講解讀者可以系統(tǒng)掌握從環(huán)境準(zhǔn)備到日常提交、分支對(duì)比、推送合并的完整流程減少命令行與界面之間的頻繁切換有效提升協(xié)同開(kāi)發(fā)與代碼維護(hù)效率。1. 先別急著玩界面pycharm配置git前要清楚的三件事很多人第一次做 pycharm配置git 這件事是在項(xiàng)目已經(jīng)寫(xiě)到一半的時(shí)候裝好了PyCharm新建了項(xiàng)目然后在菜單欄里翻了半天找不到提交按鈕。不是PyCharm藏得深而是你得先告訴它兩件事系統(tǒng)里已經(jīng)裝了Git并且當(dāng)前項(xiàng)目已經(jīng)納入了版本控制。這篇筆記要做的就是把這兩件事以及后續(xù)的提交、推送、分支操作全部講清楚適合剛接觸IDE和Git的開(kāi)發(fā)者也適合換電腦后需要重新配置的人。全程不用記復(fù)雜命令但每個(gè)界面上你能看到的按鈕我都會(huì)告訴你它背后對(duì)應(yīng)哪條Git命令出了錯(cuò)也知道去哪查。2. 配置前置裝好Git本體、填好全局身份卡住就別往下走2.1 安裝Git并驗(yàn)證PATHWindows與macOS的各自細(xì)節(jié)PyCharm本身不攜帶Git它只是在界面上調(diào)用你系統(tǒng)里已經(jīng)裝好的Git可執(zhí)行文件。所以配置的第一步不是打開(kāi)PyCharm而是確認(rèn)系統(tǒng)里有一個(gè)能用的Git。Windows下常見(jiàn)的做法是用安裝包一路安裝但安裝過(guò)程中有一步下拉框非常關(guān)鍵它決定你之后在PyCharm和終端里能不能直接敲git命令。安裝到選擇組件的界面時(shí)注意看Adjusting your PATH environment這一項(xiàng)默認(rèn)選的是Use Git from the command line and also from 3rd-party software這個(gè)選項(xiàng)會(huì)把Git的bin目錄寫(xiě)進(jìn)系統(tǒng)PATHPyCharm才能自動(dòng)識(shí)別。如果你之前用的是Use Git from Git Bash only那打開(kāi)PyCharm多半會(huì)報(bào)“Git not found”。安裝完成后按WinR輸入cmd在命令行里跑一句驗(yàn)證git --version能看到git version 2.30.0之類輸出說(shuō)明命令已經(jīng)進(jìn)了PATHPyCharm識(shí)別不了就是設(shè)置面板的問(wèn)題繼續(xù)看下一節(jié)。如果提示“不是內(nèi)部或外部命令”先不要懷疑安裝失敗把命令行窗口關(guān)掉重新開(kāi)一次PATH才會(huì)重新加載還不行就檢查系統(tǒng)環(huán)境變量里是否有Git的bin路徑手動(dòng)補(bǔ)一條例如C:\Program Files\Git\bin。macOS這邊簡(jiǎn)單一些裝完Git后打開(kāi)終端執(zhí)行同樣的驗(yàn)證命令。macOS在第一次執(zhí)行g(shù)it時(shí)會(huì)彈系統(tǒng)對(duì)話框讓你安裝“Command Line Tools”允許后會(huì)自動(dòng)裝好。屏幕提示不再是“command not found”就說(shuō)明這一步過(guò)了。這里有個(gè)小習(xí)慣不論哪個(gè)系統(tǒng)裝完Git后順手分配一個(gè)提交身份避免等會(huì)兒在PyCharm里第一次提交就被卡住git config --global user.name 你的名字 git config --global user.email 你的郵箱這兩條命令分別設(shè)置了提交者的姓名和郵箱。--global表示該配置對(duì)你機(jī)器上的所有倉(cāng)庫(kù)生效命令執(zhí)行后不輸出任何東西是正常的可以用git config --list查看確認(rèn)。很多新手跳過(guò)這一步結(jié)果在PyCharm里點(diǎn)提交左下角飄紅Please tell me who you are這就是身份沒(méi)設(shè)置的表現(xiàn)。2.2 PyCharm設(shè)置面板里的兩個(gè)必經(jīng)入口Version Control與Git確認(rèn)系統(tǒng)Git可用后打開(kāi)PyCharm按快捷鍵CtrlAltS進(jìn)設(shè)置界面在左側(cè)搜Git。這里有第一個(gè)必經(jīng)入口Settings → Version Control → Git右側(cè)頂部是Path to Git executable一般情況下PyCharm會(huì)自動(dòng)填上你只需要點(diǎn)一下旁邊的Test按鈕彈出Git executed successfully就說(shuō)明識(shí)別正常。如果這里空白手工點(diǎn)文件夾圖標(biāo)選擇剛才安裝的git.exeWindows路徑通常在C:\Program Files\Git\cmd\git.exe。第二個(gè)入口藏在Settings → Version Control的根頁(yè)面它決定當(dāng)前打開(kāi)的項(xiàng)目是否啟用版本控制集成。很多人配置完Git路徑后回到主界面發(fā)現(xiàn)還是沒(méi)有Commit按鈕原因就是這一步項(xiàng)目本身沒(méi)有成功關(guān)聯(lián)到Git。正常狀態(tài)下這里會(huì)列出當(dāng)前打開(kāi)的項(xiàng)目名稱右側(cè)有一個(gè)下拉框選擇版本控制系統(tǒng)選Git確認(rèn)后主界面頂部才會(huì)出現(xiàn)一排Git操作圖標(biāo)。補(bǔ)充一個(gè)容易被忽略的入口Settings → Tools → Terminal。如果想讓PyCharm內(nèi)置終端也使用命令行Git把這里的Shell path改成Git Bash的可執(zhí)行文件路徑。Windows下早期版本需要手填C:\Program Files\Git\bin\bash.exe新版直接下拉選Git Bash即可。這個(gè)設(shè)置不影響界面操作但會(huì)影響你之后看Git輸出的原始日志建議順手配掉。到這里PyCharm和Git本體之間的通路已經(jīng)建立。下一步讓項(xiàng)目本身成為Git倉(cāng)庫(kù)。3. 讓項(xiàng)目進(jìn)版本庫(kù)本地倉(cāng)庫(kù)初始化與遠(yuǎn)程倉(cāng)庫(kù)對(duì)接3.1 在PyCharm用VCS菜單初始化倉(cāng)庫(kù)兩個(gè)入口的差異讓項(xiàng)目成為Git倉(cāng)庫(kù)PyCharm里有兩種常見(jiàn)路徑。第一種適合已經(jīng)寫(xiě)了一半的項(xiàng)目主菜單VCS → Enable Version Control Integration彈出的對(duì)話框里選擇Git點(diǎn)確定后項(xiàng)目根目錄會(huì)被標(biāo)記為倉(cāng)庫(kù)根目錄。第二種適合剛新建項(xiàng)目的場(chǎng)景在New Project的窗口里Version Control下拉框直接選Git項(xiàng)目創(chuàng)建的同時(shí)倉(cāng)庫(kù)就初始化好了。兩種方式的本質(zhì)都是執(zhí)行g(shù)it init區(qū)別在于第二種會(huì)在項(xiàng)目模板生成階段就把.git目錄放進(jìn)去后續(xù)不用再手動(dòng)啟用。初始化完成后最直觀的變化在文件顏色上未被Git跟蹤的新文件顯示為紅色已跟蹤但修改過(guò)的文件變成綠色提交后恢復(fù)為白色。這是PyCharm的VCS文件狀態(tài)著色新手經(jīng)常誤以為是編碼錯(cuò)誤。緊接著做一件事在項(xiàng)目根目錄新建.gitignore文件把不需要納入版本控制的內(nèi)容排除掉。一個(gè)Python項(xiàng)目最基礎(chǔ)的內(nèi)容如下__pycache__/ *.pyc .idea/ .vscode/ .env三行簡(jiǎn)單說(shuō)明PyCharm的.idea目錄存放當(dāng)前機(jī)器的項(xiàng)目配置不同操作系統(tǒng)和不同人的PyCharm版本會(huì)生成不同內(nèi)容放進(jìn)版本庫(kù)會(huì)導(dǎo)致無(wú)意義的沖突.env文件通常存數(shù)據(jù)庫(kù)密碼和密鑰進(jìn)去遠(yuǎn)程倉(cāng)庫(kù)等于公開(kāi)敏感信息__pycache__是運(yùn)行時(shí)的字節(jié)碼緩存沒(méi)有任何版本價(jià)值。.gitignore的生效規(guī)則是在文件里寫(xiě)了之后尚未被跟蹤的路徑才會(huì)被忽略如果某個(gè)文件已經(jīng)被提交過(guò)要先用git rm --cached把它從索引里挪出來(lái)這個(gè)坑會(huì)在后面避坑章詳細(xì)展開(kāi)。此時(shí)回到PyCharm主界面右上角會(huì)出現(xiàn)一排圖標(biāo)向下的箭頭表示拉取兩個(gè)半圓箭頭表示更新項(xiàng)目藍(lán)色向上箭頭表示推送。Git工具窗口從View → Tool Windows → Git打開(kāi)左下角三列分別是本地變更、日志和控制臺(tái)輸出。變更列表里能看到所有未提交的文件文件右鍵有Git → Add子菜單對(duì)應(yīng)命令git add這一步是暫存別和提交搞混。3.2 添加遠(yuǎn)程地址并完成首次推送SSH與HTTPS本地倉(cāng)庫(kù)建好后還需要接上遠(yuǎn)程倉(cāng)庫(kù)否則代碼永遠(yuǎn)只存在本機(jī)。遠(yuǎn)程地址有兩種協(xié)議HTTPS和SSH。兩者的核心差異在鑒權(quán)方式新手常用HTTPS因?yàn)槭琴~號(hào)加密碼就能推但GitHub、Gitee等平臺(tái)已經(jīng)陸續(xù)改了規(guī)則密碼登錄被取消HTTPS方式必須使用Personal Access Token也就是個(gè)人訪問(wèn)令牌密碼欄填的不是賬號(hào)密碼而是令牌字符串。SSH方式則走密鑰對(duì)提前生成一次密鑰之后每次推送都不用輸任何口令。在遠(yuǎn)程平臺(tái)上新建一個(gè)空倉(cāng)庫(kù)拿到地址后回到PyCharmGit → Manage Remotes打開(kāi)管理窗口點(diǎn)加號(hào)Name填originURL粘貼倉(cāng)庫(kù)地址。這對(duì)應(yīng)命令行執(zhí)行g(shù)it remote add origin gitgithub.com:你的用戶名/你的倉(cāng)庫(kù)名.gitorigin只是一個(gè)約定俗成的名字表示“這是原始遠(yuǎn)程倉(cāng)庫(kù)”你可以改成別的名字但所有教程和默認(rèn)操作都假定它叫origin不建議換。添加成功后首次推送在主界面點(diǎn)那個(gè)藍(lán)色向上箭頭PyCharm會(huì)彈一個(gè)窗口讓你選擇推送的分支默認(rèn)是當(dāng)前分支。強(qiáng)制推薦在命令行執(zhí)行一次帶參數(shù)的推送git push -u origin main-u參數(shù)的作用是把本地分支和遠(yuǎn)程分支建立追蹤關(guān)系相當(dāng)于告訴Git以后在main分支上敲git push或git pull默認(rèn)對(duì)origin的main分支操作。如果不加這個(gè)參數(shù)之后每次推送都要重復(fù)寫(xiě)完整分支名。執(zhí)行完這條命令本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)就算是正式打通了。如果選擇SSH方式需要先生成密鑰對(duì)ssh-keygen -t ed25519 -C 你的郵箱默認(rèn)會(huì)在~/.ssh下生成id_ed25519私鑰和id_ed25519.pub公鑰把公鑰內(nèi)容復(fù)制到遠(yuǎn)程平臺(tái)的SSH Keys管理頁(yè)面。-t ed25519指定非對(duì)稱加密算法類型比傳統(tǒng)的RSA密鑰更短且更安全-C只是加一個(gè)注釋方便辨認(rèn)不影響使用。生成過(guò)程會(huì)提示輸入密碼短語(yǔ)直接回車表示不設(shè)密碼方便日常推送。4. 日常編碼時(shí)真正高頻的四個(gè)操作提交、推送、拉取與分支4.1 Commit與Push拆開(kāi)理解先落本地再上遠(yuǎn)程遠(yuǎn)程倉(cāng)庫(kù)連接成功后每天的開(kāi)發(fā)循環(huán)就是四個(gè)動(dòng)作提交、推送、拉取、切分支。先講最容易混淆的一對(duì)Commit和Push。很多人以為點(diǎn)了提交按鈕代碼就上了遠(yuǎn)程倉(cāng)庫(kù)實(shí)際沒(méi)有。Commit的全稱是git commit它只把當(dāng)前變更記錄到本地倉(cāng)庫(kù)生成一個(gè)版本號(hào)Push才負(fù)責(zé)把本地版本上傳到遠(yuǎn)程。這兩步中間隔著網(wǎng)絡(luò)完全可以只Commit不Push等代碼邏輯確認(rèn)沒(méi)問(wèn)題后再推送。在PyCharm里Commit的入口是右上角的Commit按鈕或者Git → Commit快捷鍵CtrlK。彈出的Commit窗口上半部分是變更文件列表每個(gè)文件右側(cè)有勾選框?qū)?yīng)git add被勾選的文件才會(huì)進(jìn)入本次提交下半部分是提交信息輸入框?qū)懲晷畔⒑蟾鶕?jù)你的需要從兩個(gè)按鈕里選Commit只提交到本地Commit and Push在本地提交后緊接著彈推送對(duì)話框。我的建議是剛開(kāi)始用的時(shí)候只點(diǎn)Commit推送單獨(dú)點(diǎn)這樣能看清每個(gè)動(dòng)作的邊界不會(huì)因?yàn)橐淮握`操作把半成品代碼推上去。拉取操作對(duì)應(yīng)git pull快捷鍵CtrlT。這里有一個(gè)選項(xiàng)容易被忽略在PyCharm的Update Project對(duì)話框里有兩個(gè)單選Update直接合并遠(yuǎn)程變更Update (Rebase)先把本地未推送的提交暫存起來(lái)再合并遠(yuǎn)程變更最后把暫存的提交補(bǔ)上去。日常開(kāi)發(fā)選Rebase能讓提交記錄是一條直線可讀性好很多。但要注意Rebase會(huì)改寫(xiě)提交歷史如果這條分支已經(jīng)推送到遠(yuǎn)程并且其他同事在用別用Rebase否則會(huì)讓人家倉(cāng)庫(kù)里的歷史和你對(duì)不上最后只能做強(qiáng)制推送收?qǐng)觥C看翁峤磺坝浀迷贑ommit窗口里看一下變更列表確認(rèn)沒(méi)有.idea/workspace.xml這類本地偏好文件和密鑰文件混進(jìn)來(lái)。這種誤提交在避坑章里會(huì)作為重點(diǎn)踩坑記錄講。4.2 分支的創(chuàng)建、切換與合并在主面板完成不等于不用命令行分支是多人協(xié)作里繞不開(kāi)的操作。PyCharm底部狀態(tài)欄右側(cè)有一個(gè)顯示當(dāng)前分支名的區(qū)域比如main點(diǎn)它會(huì)彈出所有本地分支列表這就是分支操作的主入口。創(chuàng)建新分支在彈出菜單里選New Branch輸入分支名PyCharm會(huì)自動(dòng)切換過(guò)去這對(duì)應(yīng)兩條命令git branch 分支名和git checkout 分支名實(shí)際上新版Git更推薦用git switch但PyCharm界面里看不到區(qū)別你只需要知道它同時(shí)完成了創(chuàng)建和切換兩個(gè)動(dòng)作。日常開(kāi)發(fā)的規(guī)范分支名通常帶類型前綴比如feature/login-page、fix/bug-1023。分支名里用斜杠分組是Git官方推薦的約定不是必須但團(tuán)隊(duì)協(xié)作時(shí)能一眼看出分支用途。切換分支在PyCharm里同樣是點(diǎn)擊底部狀態(tài)欄分支名選擇目標(biāo)分支快捷鍵CtrlShiftBackspace可以快速回跳上一次所在分支這在我臨時(shí)切去修線上bug時(shí)非常好用。分支合并的入口在Git → Branches → 選擇要被合并的分支 → Merge into Current。比如當(dāng)前在main分支上要合并feature/login-page就選這個(gè)feature分支然后點(diǎn)Merge into Current。這里有一個(gè)關(guān)鍵心理預(yù)設(shè)合并不是把分支里的文件復(fù)制過(guò)來(lái)而是把兩個(gè)分支的提交歷史做一次合并所以會(huì)產(chǎn)生一個(gè)新的合并提交。如果當(dāng)前分支和待合并分支同時(shí)改了同一個(gè)文件的同一行PyCharm會(huì)彈沖突對(duì)話框左側(cè)是當(dāng)前版本右側(cè)是分支版本中間是合并結(jié)果預(yù)覽。逐處處理沖突后點(diǎn)Apply提交信息會(huì)默認(rèn)寫(xiě)成Merge branch feature/login-page保留默認(rèn)即可不要為了好看刪掉。分支操作里最容易翻車的是在主分支上直接改代碼。記住一條原則——main或master分支永遠(yuǎn)保持可發(fā)布狀態(tài)新功能代碼一律在feature分支里寫(xiě)測(cè)好了再合并回來(lái)。如果團(tuán)隊(duì)只有你一個(gè)開(kāi)發(fā)者這條原則同樣適用因?yàn)樗荊it工作流的根基不是有沒(méi)有人協(xié)作的問(wèn)題。5. 避坑指南PyCharm配Git繞不開(kāi)的5個(gè)坑5.1 “Git is not a valid command”不是Git裝錯(cuò)了是PATH沒(méi)對(duì)上現(xiàn)象PyCharm設(shè)置面板里Test按鈕變紅提示Git is not a valid command但系統(tǒng)終端里git --version正常運(yùn)行。原因PyCharm進(jìn)程在啟動(dòng)時(shí)繼承了當(dāng)時(shí)的環(huán)境變量。如果你在PyCharm打開(kāi)之后才安裝Git或修改PATHIDE里的環(huán)境變量不會(huì)自動(dòng)刷新所以它找不到git可執(zhí)行文件。另一個(gè)常見(jiàn)原因是PyCharm是綠色版或免安裝版沒(méi)有經(jīng)過(guò)安裝器的環(huán)境變量廣播。解決首先是重啟PyCharm讓它重新讀取系統(tǒng)環(huán)境變量無(wú)效就在Settings → Version Control → Git里手動(dòng)指定可執(zhí)行文件路徑不用靠自動(dòng)檢測(cè)。Windows下填C:\Program Files\Git\cmd\git.exemacOS下可以用終端查出路徑which git的輸出結(jié)果原樣填進(jìn)去。注意不要填成了bash路徑要的是git主程序。5.2 Push被拒遠(yuǎn)Failed to push some refs現(xiàn)象點(diǎn)擊Push后Git工具窗口控制臺(tái)里報(bào)錯(cuò)第一行寫(xiě)著Failed to push some refs to緊跟著一句Updates were rejected because the remote contains work that you do not have locally。原因遠(yuǎn)程倉(cāng)庫(kù)的提交歷史領(lǐng)先于本地也就是說(shuō)在你上次Pull之后別人往遠(yuǎn)程倉(cāng)庫(kù)推送了新提交Git出于安全考慮拒絕用一個(gè)“過(guò)時(shí)”的本地歷史覆蓋遠(yuǎn)程歷史。新手最常見(jiàn)的誤操作是在這個(gè)提示出來(lái)后直接勾選Force Push這會(huì)讓遠(yuǎn)程倉(cāng)庫(kù)丟棄那些遠(yuǎn)程獨(dú)有的提交如果那些提交是同事的代碼后果就是協(xié)作歷史被抹掉。解決先CtrlT拉取遠(yuǎn)程變更PyCharm會(huì)彈Update Project對(duì)話框選擇Update (Rebase)等它把遠(yuǎn)程提交和本地未推送提交整合成一條干凈的歷史再重新Push。如果拉取過(guò)程中出現(xiàn)沖突用合并對(duì)話框逐處解決。這里面有個(gè)值得記住的原則非緊急情況永遠(yuǎn)不使用Force Push它一旦執(zhí)行遠(yuǎn)程歷史被覆蓋有能力找回的人只有平臺(tái)管理員。5.3 提示輸入Password或Token填了賬號(hào)密碼就是登不進(jìn)現(xiàn)象用HTTPS方式Clone或Push時(shí)彈出一個(gè)憑據(jù)窗口要求輸入Password或Token輸入平臺(tái)賬號(hào)密碼之后反復(fù)提示認(rèn)證失敗。原因主流的代碼托管平臺(tái)已經(jīng)全面取消賬號(hào)密碼的HTTPS認(rèn)證改用Personal Access Token也就是個(gè)人訪問(wèn)令牌。這個(gè)Token不是拿來(lái)登錄網(wǎng)頁(yè)的是作為密碼填進(jìn)Git憑據(jù)窗口里的。很多人在這個(gè)窗口填了平臺(tái)登錄密碼Git拿它去認(rèn)證服務(wù)端只認(rèn)Token雙方對(duì)不上自然失敗。解決到托管平臺(tái)里生成一個(gè)新的訪問(wèn)令牌生成時(shí)勾選repo權(quán)限把生成的字符串復(fù)制粘貼到憑據(jù)窗口的Password欄用戶名照填。另一種一勞永逸的解法是切換SSH協(xié)議只要在倉(cāng)庫(kù)管理窗口把URL從https://開(kāi)頭換成git開(kāi)頭即自動(dòng)切換成密鑰認(rèn)證之后再也見(jiàn)不到這個(gè)憑據(jù)窗口。如果是已有倉(cāng)庫(kù)用Git → Manage Remotes直接把URL改掉就行注意改動(dòng)后要重新git fetch一次確認(rèn)連通。5.4 切換分支后代碼“消失”不是丟了是藏在沒(méi)提交的變更里現(xiàn)象當(dāng)前分支上有幾個(gè)改過(guò)的文件右下角分支名點(diǎn)了一下切到另一個(gè)分支切回來(lái)后發(fā)現(xiàn)改動(dòng)的代碼不見(jiàn)了文件內(nèi)容恢復(fù)成了改動(dòng)前版本嚇出一身冷汗。原因Git切換分支時(shí)會(huì)清空工作區(qū)里已跟蹤文件的未提交改動(dòng)因?yàn)槟切└膭?dòng)本質(zhì)上是基于原分支的不能帶到新分支。PyCharm在切換前會(huì)彈一個(gè)Uncommitted Changes窗口提示你有未提交變更很多人在彈窗里選了Force Checkout這個(gè)選項(xiàng)會(huì)丟棄這些未提交的改動(dòng)代碼就從工作區(qū)消失了。解決不是完全沒(méi)有后悔藥。如果只是丟棄了一兩個(gè)文件可以右鍵文件目錄Git → Local History → Show HistoryPyCharm的本地歷史里還保存著最近幾小時(shí)內(nèi)的文件快照能找回大部分內(nèi)容。但真正的習(xí)慣是防止這個(gè)場(chǎng)景發(fā)生在切換分支前要么先Commit把臨時(shí)提交留在原分支要么右鍵變更列表Git → Stash Changes把改動(dòng)暫存到一個(gè)叫stash的坑位里切回來(lái)后再Git → Unstash Changes取回。Stash對(duì)應(yīng)命令行里的git stash和git stash pop是保護(hù)未提交代碼最標(biāo)準(zhǔn)的方式。從這次翻車之后我的習(xí)慣是切分支前先瞄一眼Git工具窗口里有沒(méi)有紅色的未提交變更有就先處理絕不給Force Checkout出場(chǎng)機(jī)會(huì)。5.5 大文件推不上去LFS不是插件是遠(yuǎn)程倉(cāng)庫(kù)的協(xié)議配合現(xiàn)象項(xiàng)目里加了一個(gè)數(shù)據(jù)集或設(shè)計(jì)資源壓縮包幾百M(fèi)BPush時(shí)卡在傳輸階段或者直接報(bào)錯(cuò)說(shuō)遠(yuǎn)程倉(cāng)庫(kù)超出文件大小限制。原因托管平臺(tái)的普通Git倉(cāng)庫(kù)一般不歡迎大文件Git本身的傳輸協(xié)議對(duì)大文件也不友好因?yàn)樗衙總€(gè)文件的所有歷史版本完整存下來(lái)一個(gè)1GB的文件改十次倉(cāng)庫(kù)體積就接近10GB服務(wù)端和本地都會(huì)爆炸。這是Git的設(shè)計(jì)邊界不是PyCharm的故障。解決常見(jiàn)做法是引入Git LFS即Large File Storage大文件存儲(chǔ)方案。它的原理是用指針對(duì)大文件做輕量引用真實(shí)文件存放在獨(dú)立的存儲(chǔ)區(qū)。在項(xiàng)目倉(cāng)庫(kù)里先把需要托管的大文件類型寫(xiě)進(jìn).gitattributes*.zip filterlfs difflfs mergelfs -text *.ipk filterlfs difflfs mergelfs -text然后執(zhí)行一次git lfs install初始化鉤子。執(zhí)行完后后續(xù)Commit這個(gè)大文件時(shí)Git會(huì)自動(dòng)走LFS通道。推不上去時(shí)要留意遠(yuǎn)程倉(cāng)庫(kù)的LFS配額這是平臺(tái)側(cè)的限制和本機(jī)配置無(wú)關(guān)。還有一條經(jīng)驗(yàn)除非這個(gè)文件必須讓每個(gè)協(xié)作者都完整下載否則優(yōu)先考慮不放倉(cāng)庫(kù)用網(wǎng)盤(pán)或內(nèi)部文件服務(wù)分發(fā)LFS只用來(lái)存儲(chǔ)真正繞不開(kāi)的構(gòu)建產(chǎn)物。5.6 換電腦后SSH密鑰失效拷的不是文件是配套關(guān)系現(xiàn)象新電腦上打開(kāi)PyCharm拉取或推送時(shí)提示Permission denied (publickey)明明在舊電腦上推送一直正常。原因公鑰和私鑰是成對(duì)的。換電腦后只復(fù)制了項(xiàng)目代碼沒(méi)有復(fù)制~/.ssh目錄下的私鑰文件或者把公鑰粘貼到了遠(yuǎn)程平臺(tái)但本地沒(méi)有對(duì)應(yīng)的私鑰服務(wù)端校驗(yàn)永遠(yuǎn)過(guò)不了。另一個(gè)隱蔽原因是新電腦的全局身份沒(méi)配置提交記錄里的作者信息變成了未知用戶遠(yuǎn)程平臺(tái)拒絕關(guān)聯(lián)。解決最快的解法是把舊電腦~/.ssh下的id_ed25519和id_ed25519.pub兩個(gè)文件一起拷到新電腦同樣的目錄下同時(shí)確認(rèn)遠(yuǎn)程平臺(tái)里存的是同一個(gè)公鑰如果公鑰在平臺(tái)上有變動(dòng)用新的公鑰重新注冊(cè)。然后在新電腦上執(zhí)行ssh-agent -s ssh-add ~/.ssh/id_ed25519ssh-add的作用是把私鑰加載到ssh-agent進(jìn)程里有些發(fā)行版開(kāi)機(jī)不會(huì)自動(dòng)加載導(dǎo)致Git調(diào)用SSH協(xié)議時(shí)找不到私鑰。做完后可以用ssh -T gitgitee.com或?qū)?yīng)平臺(tái)域名測(cè)試鏈路顯示歡迎語(yǔ)即代表通了。換電腦后建議順手復(fù)查git config --global user.email確保和平臺(tái)賬號(hào)一致很多提交被處理成Anonymous Author的案例查到最后都是這里漏了。6. 配置完成后自己做一次全鏈路驗(yàn)證從改一行代碼到回滾到上一個(gè)版本到這里環(huán)境已經(jīng)全部打通但配置是否真的可靠我建議用一個(gè)完整的鏈路自測(cè)一遍全程十分鐘。這一步驗(yàn)證的是IDE下的Git集成也順帶建立你對(duì)整個(gè)流程的肌肉記憶。實(shí)踐路徑在PyCharm中打開(kāi)項(xiàng)目到項(xiàng)目根目錄新建一個(gè)文件命名為check_git.py輸入一行代碼并保存。打開(kāi)Git → Commit勾選這個(gè)新文件填寫(xiě)提交信息test: check git config點(diǎn)Commit。隨后右鍵項(xiàng)目根目錄選擇Git → Repository → Push把提交推到遠(yuǎn)程倉(cāng)庫(kù)。接著模擬一次還原操作把該文件的內(nèi)容改成另一行代碼再次提交并推送然后在Git → Log里選中上一次提交記錄右鍵選擇Reset Current Branch to Here在彈出對(duì)話框里選Soft模式PyCharm會(huì)把這個(gè)倉(cāng)庫(kù)回滾到上一個(gè)提交的快照狀態(tài)你新增的那次提交不會(huì)丟失它還在Log歷史里只是當(dāng)前分支指針指了回來(lái)?;貪L操作里三個(gè)模式的區(qū)別值得記住Soft保留所有改動(dòng)在工作區(qū)相當(dāng)于撤銷了提交但代碼改動(dòng)還在Mixed保留改動(dòng)但移出暫存區(qū)Hard直接丟棄改動(dòng)文件恢復(fù)到當(dāng)時(shí)的狀態(tài)。日常操作里我?guī)缀醪挥肏ard它沒(méi)有后悔藥真用的時(shí)候只在確認(rèn)代碼無(wú)用并已備份的情況下用。最后在PyCharm底部狀態(tài)欄的分支名上右鍵選擇Show History或者打開(kāi)Git工具窗口切到Log標(biāo)簽頁(yè)你剛才的操作以圖形化時(shí)間線方式展開(kāi)在列表里每一行對(duì)應(yīng)真實(shí)提交哈希值。對(duì)照一下提交說(shuō)明和時(shí)間能看到整個(gè)鏈路是通的說(shuō)明從Git安裝、身份配置、倉(cāng)庫(kù)初始化到遠(yuǎn)程對(duì)接的每一步都正確落位了。我自己的習(xí)慣是每次換電腦或換IDE后都先跑一遍這套驗(yàn)證跑完才敢把舊環(huán)境的任務(wù)遷移過(guò)來(lái)。這套驗(yàn)證同樣適合作為新同事接手代碼前的熱身操作因?yàn)橐淮纬晒Φ娜鞒膛芡ū热魏闻渲梦臋n都有說(shuō)服力。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取