境搭建與核心工作流實(shí)戰(zhàn):從本地安裝到遠(yuǎn)程協(xié)作)
1. 從零開始的Git環(huán)境搭建為什么你需要兩個(gè)“版本”如果你剛開始接觸代碼管理或者正準(zhǔn)備加入一個(gè)軟件開發(fā)團(tuán)隊(duì)那么“Git”這個(gè)詞你肯定繞不過(guò)去。很多人一上來(lái)就被各種教程搞懵了一會(huì)兒讓去官網(wǎng)下載安裝一會(huì)兒又說(shuō)可以直接在網(wǎng)頁(yè)上操作。這“網(wǎng)頁(yè)版”和“Windows版”到底有什么區(qū)別我該用哪個(gè)今天我就以一個(gè)過(guò)來(lái)人的身份幫你把這兩件事徹底捋清楚讓你從安裝到第一次提交代碼每一步都走得明明白白。簡(jiǎn)單來(lái)說(shuō)Git網(wǎng)頁(yè)版和Git Windows版是同一核心工具在不同場(chǎng)景下的兩種“面孔”它們解決的問題完全不同。你可以把Git想象成一套強(qiáng)大的“版本控制系統(tǒng)”引擎。Git Windows版就是把這臺(tái)引擎完整地安裝到你的本地電腦上讓你擁有全部的控制權(quán)可以在自己的機(jī)器上創(chuàng)建倉(cāng)庫(kù)、管理歷史、進(jìn)行各種復(fù)雜的操作。而Git網(wǎng)頁(yè)版通常指GitHub、Gitee、GitLab等代碼托管平臺(tái)的網(wǎng)頁(yè)界面則是別人已經(jīng)搭建好的、基于這臺(tái)引擎的“在線服務(wù)中心”。你通過(guò)瀏覽器訪問它主要用它來(lái)瀏覽別人的代碼、進(jìn)行代碼審查、管理團(tuán)隊(duì)協(xié)作任務(wù)或者把你本地引擎處理好的代碼“同步”到云端。所以對(duì)于新手我的建議非常明確兩者你都需要但學(xué)習(xí)的起點(diǎn)和核心是Git Windows版即本地Git命令行工具。網(wǎng)頁(yè)版是你看世界和與人協(xié)作的窗口而本地版是你真正干活、創(chuàng)造內(nèi)容的工具。沒有本地Git你就無(wú)法在電腦上寫代碼并管理它的版本沒有網(wǎng)頁(yè)版托管平臺(tái)你的代碼就難以分享和備份。接下來(lái)我會(huì)手把手帶你完成這兩部分的安裝與基礎(chǔ)使用過(guò)程中穿插我踩過(guò)的坑和總結(jié)的技巧保證你看完就能上手。2. Git Windows版安裝避開默認(rèn)選項(xiàng)里的“坑”首先我們搞定本地環(huán)境。訪問Git的官方網(wǎng)站git-scm.com下載Windows安裝程序。這個(gè)過(guò)程看似一路“Next”就行但其實(shí)有幾個(gè)關(guān)鍵選項(xiàng)選錯(cuò)了后面會(huì)非常麻煩。2.1 安裝過(guò)程中的關(guān)鍵配置解析運(yùn)行下載好的Git-2.xx.x-64-bit.exe安裝文件。在“Select Components”組件選擇界面我建議你保持默認(rèn)勾選即可但務(wù)必理解它們是什么Git Bash Here和Git GUI Here這會(huì)在你的文件資源管理器右鍵菜單中添加兩個(gè)選項(xiàng)非常方便。在任意文件夾里右鍵就能快速在此處打開Git命令行或圖形界面。Associate .gitconfiguration files with the default text editor*將.git后綴的配置文件與你的默認(rèn)文本編輯器關(guān)聯(lián)。建議勾選方便以后直接編輯Git配置文件。接下來(lái)是重頭戲“Choosing the default editor used by Git”。這里讓你選擇Git的默認(rèn)文本編輯器。當(dāng)你進(jìn)行提交commit而不寫提交信息時(shí)或者解決沖突時(shí)Git會(huì)打開這個(gè)編輯器讓你輸入內(nèi)容。強(qiáng)烈不建議新手選擇默認(rèn)的“Vim”除非你熟悉Vim的操作按i進(jìn)入插入模式輸入內(nèi)容按Esc后輸入:wq保存退出。對(duì)于Windows用戶一個(gè)更友好的選擇是“Use the Nano editor”或者下拉選擇“Notepad”如果你安裝了的話。這里為了絕對(duì)簡(jiǎn)單我們可以先選擇“Use the Nano editor”它的操作提示在屏幕底部相對(duì)直觀。然后是“Adjusting your PATH environment”環(huán)境變量調(diào)整。這是最重要的步驟之一。有三個(gè)選項(xiàng)Use Git from Git Bash only只在Git Bash里使用Git。這是最安全但最局限的選項(xiàng)你只能在Git Bash這個(gè)特定軟件里運(yùn)行g(shù)it命令。Git from the command line and also from 3rd-party software推薦選擇此項(xiàng)。它會(huì)把Git的可執(zhí)行文件路徑添加到系統(tǒng)的PATH環(huán)境變量中。這意味著你不僅可以在Git Bash里用還可以在Windows自帶的命令提示符CMD或PowerShell里直接輸入git命令甚至像VSCode這樣的第三方軟件也能直接調(diào)用。這為你未來(lái)的開發(fā)提供了最大的靈活性。Use Git and optional Unix tools from the Command Prompt將Git和一些Unix工具都添加到PATH。這可能會(huì)與你系統(tǒng)已有的工具產(chǎn)生沖突一般不推薦。在“Choosing HTTPS transport backend”選擇HTTPS傳輸后端時(shí)使用默認(rèn)的“Use the OpenSSL library”即可。它負(fù)責(zé)處理當(dāng)你通過(guò)https://地址克隆倉(cāng)庫(kù)時(shí)的加密連接?!癈onfiguring the line ending conversions”配置行尾轉(zhuǎn)換是另一個(gè)容易出問題的地方。Windows和Linux/macOS系統(tǒng)對(duì)于文本文件行尾的標(biāo)記方式不同。這里的選擇至關(guān)重要Checkout Windows-style, commit Unix-style line endings推薦選擇此項(xiàng)。它的含義是當(dāng)你從遠(yuǎn)程倉(cāng)庫(kù)拉取代碼到Windows電腦時(shí)checkoutGit會(huì)把行尾轉(zhuǎn)換為Windows風(fēng)格CRLF而當(dāng)你提交代碼時(shí)commitGit又會(huì)自動(dòng)將行尾轉(zhuǎn)換回Unix風(fēng)格LF。這樣保證了你的倉(cāng)庫(kù)內(nèi)部統(tǒng)一使用LF避免不同開發(fā)者因系統(tǒng)不同導(dǎo)致整個(gè)文件都被標(biāo)記為修改的混亂局面。Checkout as-is, commit as-is不進(jìn)行任何轉(zhuǎn)換。除非你明確知道所有協(xié)作者都在同一種系統(tǒng)下工作否則不推薦。Checkout Unix-style, commit Unix-style無(wú)論檢出還是提交都使用Unix風(fēng)格LF。這適合純Linux/macOS開發(fā)環(huán)境在Windows上使用某些編輯器時(shí)可能會(huì)看到所有文字?jǐn)D在一行。最后在“Choose the default behavior ofgit pull”中關(guān)于git pull命令的默認(rèn)行為我建議選擇“Rebase”而不是“Merge”。簡(jiǎn)單來(lái)說(shuō)“Merge”會(huì)產(chǎn)生一個(gè)額外的合并提交讓提交歷史線出現(xiàn)分叉再合并的“岔路”而“Rebase”則是將你的提交“變基”到目標(biāo)分支的最新點(diǎn)之后使得提交歷史保持一條整潔的直線。對(duì)于新手理解“Rebase”需要時(shí)間但從一開始就養(yǎng)成使用它的習(xí)慣對(duì)你日后維護(hù)清晰的提交歷史大有裨益。你可以先記住這個(gè)選擇。剩下的選項(xiàng)如“Use a credential helper”使用憑據(jù)管理器一定要啟用。它會(huì)安全地保存你的GitHub/Gitee賬號(hào)密碼不用每次推送都重復(fù)輸入。2.2 安裝驗(yàn)證與基礎(chǔ)配置安裝完成后在開始菜單找到“Git”文件夾打開“Git Bash”。你會(huì)看到一個(gè)黑底綠字的命令行窗口。輸入以下命令檢查是否安裝成功git --version如果顯示了類似git version 2.xx.x.windows.1的信息恭喜你安裝成功。接下來(lái)進(jìn)行最重要的全局配置這相當(dāng)于給你的Git工具刻上“名字”git config --global user.name 你的用戶名 git config --global user.email 你的郵箱這個(gè)用戶名和郵箱至關(guān)重要它會(huì)被記錄在你每一次提交中。請(qǐng)使用你將在GitHub或Gitee等平臺(tái)注冊(cè)的郵箱這樣你的提交才能和你的平臺(tái)賬號(hào)關(guān)聯(lián)起來(lái)展示正確的貢獻(xiàn)者頭像和信息。你可以用以下命令查看所有配置git config --list --global一個(gè)實(shí)用的配置是設(shè)置默認(rèn)分支名為main現(xiàn)代倉(cāng)庫(kù)的默認(rèn)選擇并美化日志輸出格式git config --global init.defaultBranch main git config --global alias.lg log --color --graph --prettyformat:%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)%an%Creset --abbrev-commit配置完別名后以后輸入git lg就能看到非常直觀、帶分支圖的提交歷史了。3. 核心工作流本地Git的第一次實(shí)戰(zhàn)安裝配置好我們立刻來(lái)體驗(yàn)一個(gè)完整的本地Git工作流。請(qǐng)打開Git Bash并切換到一個(gè)你打算存放代碼的目錄比如D:\Projects。3.1 創(chuàng)建倉(cāng)庫(kù)與“暫存區(qū)”概念首先創(chuàng)建一個(gè)練習(xí)用的文件夾并進(jìn)入mkdir my-first-git-repo cd my-first-git-repo將這個(gè)文件夾初始化為一個(gè)Git倉(cāng)庫(kù)git init你會(huì)看到提示Initialized empty Git repository in D:/Projects/my-first-git-repo/.git/。這時(shí)一個(gè)隱藏的.git文件夾被創(chuàng)建它就是這個(gè)倉(cāng)庫(kù)所有的“記憶中樞”?,F(xiàn)在創(chuàng)建一個(gè)簡(jiǎn)單的文件比如README.md并用記事本或VSCode寫入一些內(nèi)容例如# My First Git Project。關(guān)鍵概念來(lái)了在Git中你的工作目錄Working Directory和最終的版本庫(kù)Repository之間有一個(gè)叫做“暫存區(qū)”Staging Area或“索引”Index的中間層。為什么需要它它允許你精心挑選本次提交要包含哪些文件的哪些改動(dòng)而不是一股腦把所有修改都提交上去。查看當(dāng)前倉(cāng)庫(kù)狀態(tài)git status你會(huì)看到README.md被列為“Untracked files”未跟蹤的文件。Git發(fā)現(xiàn)了它但還沒有開始管理它的版本。將它添加到暫存區(qū)git add README.md再次運(yùn)行g(shù)it status你會(huì)看到README.md在“Changes to be committed”下面變成了綠色。這意味著它已被暫存準(zhǔn)備被“拍快照”了。注意git add .命令可以添加當(dāng)前目錄下所有變更的文件到暫存區(qū)非常方便但添加前務(wù)必用git status確認(rèn)一下避免把臨時(shí)文件或配置文件如包含密碼的也加進(jìn)去。3.2 提交、查看歷史與“后悔藥”將暫存區(qū)的內(nèi)容創(chuàng)建為一個(gè)永久的快照提交git commit -m feat: add initial README file-m后面是提交信息。提交信息務(wù)必認(rèn)真寫好的提交信息像日記能讓未來(lái)的你或同事一眼看懂這次改動(dòng)的目的。常見的格式約定是類型(范圍): 描述例如fix(login): correct password validation logic。提交后用我們剛才設(shè)置的別名查看歷史git lg如果沒配置別名用git log --oneline --graph也可以看到簡(jiǎn)化版現(xiàn)在我們?cè)囋囆薷腞EADME.md增加一行內(nèi)容。然后再次git status會(huì)看到文件在“Changes not staged for commit”下面紅色。這意味著Git檢測(cè)到了工作目錄中的修改但修改還沒有進(jìn)入暫存區(qū)。你可以再次git add README.md然后git commit -m “...”。但這里我想分享一個(gè)更快捷的組合命令它相當(dāng)于git add .git commit -mgit commit -am docs: update README with description注意-a參數(shù)只會(huì)添加那些已經(jīng)被Git跟蹤tracked的文件的修改到暫存區(qū)并提交。對(duì)于新增的未跟蹤文件它無(wú)效仍需先用git add。萬(wàn)一你提交信息寫錯(cuò)了怎么辦或者不小心提交了不該提交的文件這就是“后悔藥”時(shí)間修改上一次提交的信息git commit --amend -m “新的提交信息”。這會(huì)將新的信息覆蓋上一次提交前提是上一次提交還沒有推送到遠(yuǎn)程倉(cāng)庫(kù)否則會(huì)引發(fā)混亂。從暫存區(qū)撤回一個(gè)文件如果你git add了某個(gè)文件但又反悔了可以用git restore --staged 文件名Git 2.23或git reset HEAD 文件名舊命令將它從暫存區(qū)移回工作區(qū)。丟棄工作區(qū)的修改危險(xiǎn)git restore 文件名或git checkout -- 文件名。這個(gè)操作不可逆會(huì)永久丟棄你對(duì)文件尚未暫存的修改慎用4. 連接遠(yuǎn)程倉(cāng)庫(kù)本地與網(wǎng)頁(yè)版的橋梁本地玩得轉(zhuǎn)現(xiàn)在我們要把本地倉(cāng)庫(kù)和網(wǎng)頁(yè)版以GitHub為例連接起來(lái)實(shí)現(xiàn)代碼的備份與協(xié)作。4.1 在GitHub上創(chuàng)建遠(yuǎn)程倉(cāng)庫(kù)登錄GitHub點(diǎn)擊右上角“”號(hào)選擇“New repository”。填寫倉(cāng)庫(kù)名如my-first-git-repo選擇公開Public或私有Private。初始化選項(xiàng)這里千萬(wàn)不要勾選“Add a README file”、“Add .gitignore”或“Choose a license”。因?yàn)槲覀儽镜匾呀?jīng)有一個(gè)倉(cāng)庫(kù)和README.md了如果勾選GitHub會(huì)創(chuàng)建一個(gè)全新的、有初始提交的倉(cāng)庫(kù)這會(huì)導(dǎo)致我們本地倉(cāng)庫(kù)和遠(yuǎn)程倉(cāng)庫(kù)歷史不一致在第一次推送時(shí)需要進(jìn)行額外的合并操作增加復(fù)雜度。我們就創(chuàng)建一個(gè)完全空的遠(yuǎn)程倉(cāng)庫(kù)。點(diǎn)擊“Create repository”創(chuàng)建。創(chuàng)建成功后你會(huì)看到一個(gè)快速設(shè)置頁(yè)面其中顯示了倉(cāng)庫(kù)的HTTPS地址如https://github.com/你的用戶名/my-first-git-repo.git和SSH地址。4.2 關(guān)聯(lián)并推送代碼回到你的Git Bash在本地倉(cāng)庫(kù)目錄下執(zhí)行以下命令將本地倉(cāng)庫(kù)與遠(yuǎn)程倉(cāng)庫(kù)關(guān)聯(lián)起來(lái)。這里使用HTTPS地址git remote add origin https://github.com/你的用戶名/my-first-git-repo.gitorigin是給這個(gè)遠(yuǎn)程倉(cāng)庫(kù)起的一個(gè)別名習(xí)慣上叫origin你可以改成別的但沒必要。接下來(lái)將本地倉(cāng)庫(kù)的main分支推送到遠(yuǎn)程倉(cāng)庫(kù)的main分支并建立追蹤關(guān)系git push -u origin main-u參數(shù)是--set-upstream的簡(jiǎn)寫它建立了本地main分支與遠(yuǎn)程origin/main分支的追蹤關(guān)系。設(shè)置好后以后在這個(gè)分支上只需要輸入git push或git pull即可Git就知道要和哪個(gè)遠(yuǎn)程分支交互。第一次推送如果使用HTTPS會(huì)彈窗或命令行要求你輸入GitHub的用戶名和密碼。注意現(xiàn)在GitHub已不再支持賬戶密碼驗(yàn)證你需要使用“Personal Access Token”個(gè)人訪問令牌作為密碼。你需要在GitHub的Settings - Developer settings - Personal access tokens中生成一個(gè)具有repo權(quán)限的token用它來(lái)代替密碼。推送成功后刷新你的GitHub倉(cāng)庫(kù)頁(yè)面就能看到本地代碼已經(jīng)同步上來(lái)了。至此你的本地Git和Git網(wǎng)頁(yè)版就成功打通了。4.3 克隆獲取別人的代碼更多時(shí)候你是從遠(yuǎn)程倉(cāng)庫(kù)獲取代碼克隆。使用git clone命令git clone https://github.com/某個(gè)開源項(xiàng)目/倉(cāng)庫(kù)名.git這個(gè)命令會(huì)做三件事1. 將遠(yuǎn)程倉(cāng)庫(kù)的所有代碼和歷史下載到本地2. 自動(dòng)創(chuàng)建一個(gè)以倉(cāng)庫(kù)名命名的文件夾3. 自動(dòng)設(shè)置好遠(yuǎn)程地址別名origin??寺⊥瓿珊笾苯舆M(jìn)入該文件夾你就已經(jīng)在一個(gè)配置好的Git倉(cāng)庫(kù)里了可以立即開始工作。5. 分支管理團(tuán)隊(duì)協(xié)作與功能開發(fā)的基石分支是Git的“殺手锏”功能它讓你能在一條獨(dú)立的時(shí)間線上開發(fā)新功能或修復(fù)Bug而不影響主線main分支。5.1 創(chuàng)建與切換分支假設(shè)你要開發(fā)一個(gè)新功能“用戶登錄”。首先基于當(dāng)前分支通常是main創(chuàng)建一個(gè)新分支并切換到它git checkout -b feature-user-login-b表示創(chuàng)建并切換。這條命令等價(jià)于先git branch feature-user-login創(chuàng)建分支再git checkout feature-user-login切換分支。在Git 2.23版本后更推薦使用git switch命令來(lái)切換分支語(yǔ)義更清晰git switch -c feature-user-login # 創(chuàng)建并切換到新分支 git switch main # 切換回main分支在新分支上你可以放心地修改代碼、多次提交所有這些操作都只存在于feature-user-login分支上main分支絲毫未變。5.2 合并分支與解決沖突當(dāng)功能開發(fā)完成并測(cè)試通過(guò)后你需要將它合并回main分支。首先切換回main分支并拉取最新的遠(yuǎn)程變更git switch main git pull origin main # 確保本地main是最新的然后執(zhí)行合并git merge feature-user-login如果feature-user-login分支的修改和main分支的修改沒有沖突Git會(huì)進(jìn)行“快進(jìn)合并”Fast-forward或自動(dòng)創(chuàng)建一個(gè)合并提交。沖突Conflict是新手最常遇到也最頭疼的問題。它發(fā)生在兩個(gè)分支修改了同一文件的同一區(qū)域時(shí)。Git無(wú)法自動(dòng)決定該保留哪個(gè)修改必須由你手動(dòng)解決。當(dāng)合并發(fā)生沖突時(shí)Git會(huì)標(biāo)記出沖突的文件。打開這些文件你會(huì)看到類似這樣的標(biāo)記 HEAD 這是main分支上的內(nèi)容 這是feature-user-login分支上的內(nèi)容 feature-user-login你需要做的就是與團(tuán)隊(duì)成員溝通決定保留哪一部分或者進(jìn)行整合。手動(dòng)編輯文件刪除這些標(biāo)記并保留你最終想要的內(nèi)容。將解決完沖突的文件添加到暫存區(qū)git add 沖突文件名。完成合并提交git commit。Git會(huì)為你預(yù)填一個(gè)合并信息的提交消息。5.3 變基保持歷史的整潔前面安裝時(shí)我們選擇了rebase作為git pull的默認(rèn)策略這里再深入一下。git rebase變基是另一種整合分支變化的方式。與merge創(chuàng)建新的合并提交不同rebase會(huì)把你當(dāng)前分支的提交“重新播放”到目標(biāo)分支的最新提交之后。例如當(dāng)你在feature分支開發(fā)時(shí)main分支已經(jīng)有了新的提交。為了讓你的提交歷史看起來(lái)像是基于最新的main開發(fā)的一條直線你可以在feature分支上執(zhí)行g(shù)it rebase main這個(gè)過(guò)程可能會(huì)遇到?jīng)_突解決方式與合并沖突類似但需要為每一個(gè)重播的提交解決可能出現(xiàn)的沖突。解決后用git rebase --continue繼續(xù)。重要經(jīng)驗(yàn)永遠(yuǎn)不要對(duì)已經(jīng)推送到遠(yuǎn)程倉(cāng)庫(kù)、且可能被其他人使用的分支執(zhí)行變基。變基會(huì)重寫提交歷史如果其他人基于你變基前的歷史進(jìn)行了工作將會(huì)產(chǎn)生極其復(fù)雜的混亂。變基的黃金法則只對(duì)你本地、尚未推送的分支進(jìn)行變基。6. Git網(wǎng)頁(yè)版GitHub的核心功能與高效使用本地Git是引擎GitHub這類網(wǎng)頁(yè)版就是車庫(kù)、展覽廳和協(xié)作中心。除了瀏覽代碼它的這幾個(gè)功能你必須會(huì)用。6.1 Issue與Pull Request協(xié)作的標(biāo)準(zhǔn)化流程Issue問題/議題用于跟蹤Bug、提議新功能、討論想法。它是所有工作的起點(diǎn)。一個(gè)好的Issue應(yīng)該描述清晰、有可復(fù)現(xiàn)的步驟或明確的需求。Pull RequestPR拉取請(qǐng)求這是GitHub協(xié)作的核心。當(dāng)你在自己的分支上完成了一個(gè)功能或修復(fù)后你向項(xiàng)目的維護(hù)者發(fā)起一個(gè)PR請(qǐng)求他們將你的分支合并到主分支。PR頁(yè)面包含了代碼差異對(duì)比、討論區(qū)、CI/CD狀態(tài)檢查等。通過(guò)PR進(jìn)行的代碼審查Code Review是保證代碼質(zhì)量的關(guān)鍵環(huán)節(jié)。標(biāo)準(zhǔn)工作流通常是發(fā)現(xiàn)Bug或想到新功能 - 創(chuàng)建一個(gè)Issue - 從main分支拉出一個(gè)新分支進(jìn)行開發(fā) - 開發(fā)完成并提交 - 推送到你的遠(yuǎn)程倉(cāng)庫(kù) - 在GitHub上對(duì)該分支發(fā)起一個(gè)指向原始項(xiàng)目main分支的PR - 等待審查、討論、修改 - 審查通過(guò)后被合并Merge或變基合并Rebase and Merge。6.2 Fork與Star參與開源與收藏項(xiàng)目Fork分叉如果你想?yún)⑴c一個(gè)你并沒有直接寫入權(quán)限的開源項(xiàng)目你可以先Fork它。這會(huì)在你的個(gè)人賬號(hào)下創(chuàng)建一個(gè)該項(xiàng)目的完整副本。你可以在自己的副本里任意修改然后通過(guò)向原項(xiàng)目發(fā)起PR來(lái)貢獻(xiàn)你的代碼。Star星標(biāo)相當(dāng)于收藏或點(diǎn)贊方便你日后快速找到感興趣的項(xiàng)目也是對(duì)作者的一種鼓勵(lì)。6.3 .gitignore文件忽略不該提交的文件這個(gè)文件雖然是在本地倉(cāng)庫(kù)創(chuàng)建但其管理是網(wǎng)頁(yè)版瀏覽代碼整潔度的關(guān)鍵。在項(xiàng)目根目錄創(chuàng)建一個(gè)名為.gitignore的文件在里面列出你希望Git完全忽略的文件或文件夾模式例如# 忽略操作系統(tǒng)自動(dòng)生成的文件 .DS_Store Thumbs.db # 忽略IDE或編輯器配置文件 .vscode/ .idea/ *.swp # 忽略依賴安裝目錄 node_modules/ __pycache__/ # 忽略編譯產(chǎn)物 *.class *.exe *.dll build/ dist/GitHub為各種語(yǔ)言提供了通用的.gitignore模板在創(chuàng)建倉(cāng)庫(kù)時(shí)可以選擇非常方便。一個(gè)好的.gitignore能避免將臨時(shí)文件、本地配置、依賴包等無(wú)關(guān)內(nèi)容提交到倉(cāng)庫(kù)保持倉(cāng)庫(kù)的純凈。7. 常見問題排查與高效技巧錦囊最后分享一些我踩過(guò)坑后總結(jié)的經(jīng)驗(yàn)?zāi)軒湍愦蠓嵘省?.1 連接失敗與認(rèn)證問題git push提示Support for password authentication was removed如前所述GitHub已禁用密碼驗(yàn)證。解決方案使用SSH密鑰或Personal Access Token。SSH方式推薦一勞永逸在本地生成SSH密鑰對(duì)ssh-keygen -t ed25519 -C “your_emailexample.com”將公鑰~/.ssh/id_ed25519.pub文件內(nèi)容添加到GitHub的SSH Keys設(shè)置中。然后將遠(yuǎn)程倉(cāng)庫(kù)地址從HTTPS改為SSHgit remote set-url origin gitgithub.com:用戶名/倉(cāng)庫(kù)名.git。Token方式生成Token在推送時(shí)用Token代替密碼??梢詫oken添加到系統(tǒng)的憑據(jù)管理器避免每次輸入。git clone或git push速度極慢可能是網(wǎng)絡(luò)問題??梢試L試配置Git代理如果你有合法的網(wǎng)絡(luò)加速服務(wù)或者使用國(guó)內(nèi)鏡像源如Gitee進(jìn)行克隆。7.2 命令遺忘與幫助系統(tǒng)記不住命令太正常了。善用幫助git help 命令打開該命令的詳細(xì)手冊(cè)英文。git 命令 -h或git 命令 --help顯示該命令的簡(jiǎn)要用法。git status你的最佳伙伴任何時(shí)候不確定狀態(tài)先運(yùn)行它。tldr git-commit如果你安裝了tldr工具它可以給出命令的常用示例比原生man更友好。7.3 圖形化工具輔助命令行強(qiáng)大但圖形化工具GUI在查看歷史、解決沖突、暫存部分文件時(shí)更直觀。Git官方自帶git gui和gitk。更流行的第三方工具有Sourcetree免費(fèi)功能全面跨平臺(tái)。GitHub Desktop與GitHub深度集成對(duì)新手極其友好。VS Code內(nèi)置的Git工具對(duì)于使用VS Code的開發(fā)者其源代碼管理面板提供了非常優(yōu)秀的圖形化操作足以應(yīng)對(duì)日常大部分需求。我的建議是從命令行開始學(xué)理解核心概念。在熟悉了基本流程后可以借助GUI工具來(lái)提高某些操作如可視化分支歷史、交互式暫存的效率。兩者結(jié)合使用效果最佳。學(xué)習(xí)Git是一個(gè)漸進(jìn)的過(guò)程不要指望一天掌握所有命令。從最基本的clone,add,commit,push,pull開始在實(shí)際項(xiàng)目中反復(fù)使用。遇到問題就查每解決一個(gè)實(shí)際問題你的理解就加深一層。記住版本控制的核心思想是“記錄快照”和“管理分支”把握住這個(gè)核心所有的命令都是圍繞它服務(wù)的工具?,F(xiàn)在打開你的終端和瀏覽器開始你的第一次git commit吧。