:安裝配置、SSH免密與分支合并全攻略)
1. 項目安全同步為什么非 Git 不可1.1 你還在用文件夾命名來管理版本嗎先問你一個扎心的問題你的項目文件里是不是還有這種東西——項目最終版_v5、項目最終版_真的不改了、項目最終版_最終最終_0321如果有那你現(xiàn)在的處境我太熟悉了。我早年間也這么干過直到有一次客戶說上一個版本挺好的改回來吧我翻了半天愣是分不清哪個文件夾才是他說的上一個版本。那一刻我就明白了靠人工維護(hù)版本本質(zhì)上是在賭運(yùn)氣。這種做法的風(fēng)險遠(yuǎn)不止分不清哪個是最新版這么簡單。你精心寫了三天的代碼一次誤刪回收站都救不回來你改了 A 模塊結(jié)果 B 模塊連帶出了 bug你卻完全回想不起來改動前是什么樣你辛辛苦調(diào)通的運(yùn)行環(huán)境換臺電腦就全廢。更別提多人協(xié)作的場景了——你傳我傳誰改了誰的最后只剩下一句別動我那個文件。這些問題的根源是一樣的項目缺少一套可追溯、可回滾、可多人協(xié)同的管理機(jī)制。Git 就是來解決這件事的。它是一個分布式版本控制系統(tǒng)你可以把它理解成給項目裝了一臺時光機(jī)每次提交commit都會拍一張完整的項目快照想回哪個版本就回哪個版本還能看到誰在什么時候改了什么。這個能力在你一個人用的時候是后悔藥在團(tuán)隊里用的時候就是協(xié)作的基礎(chǔ)規(guī)則。1.2 Git 云端倉庫解決的不只是備份但只有本地的 Git 還不夠因為你的電腦隨時可能掛掉。硬盤一壞本地那些 commit 記錄全沒了。所以要把安全兩個字真正做到位必須配合云端倉庫本地跑的是一份完整的歷史云端再存一份同樣的歷史兩邊平時通過 push推送和 pull拉取保持同步。這樣即使電腦丟了、硬盤廢了從云端重新 clone 一份下來項目原地復(fù)活。云端倉庫帶來的第二個價值是任意設(shè)備可接入。我在公司用臺式機(jī)回家用筆記本偶爾在服務(wù)器上還要臨時看代碼——只要這些設(shè)備都有 Git 并做好了認(rèn)證就能隨時把最新代碼拉到本機(jī)繼續(xù)干活。這種體驗用 U 盤拷貝時代沒法比用網(wǎng)盤同步也會遇到覆蓋錯版本的問題而 Git 的機(jī)制決定了它永遠(yuǎn)不會模糊地覆蓋你的歷史記錄。所以說這個組合解決的核心問題就是三件事版本可追溯、數(shù)據(jù)不丟失、協(xié)作有秩序。這篇文章就是要把從零開始的路走一遍——裝 Git、配環(huán)境、建云端倉庫、配 SSH 認(rèn)證、日常同步、分支合并、踩坑排查全部按我實際操作的順序來講你照著做就行。2. 從零安裝 Git 并完成基礎(chǔ)配置2.1 下載與安裝Windows、macOS、Linux 三平臺實測先說下載。Windows 用戶直接去 Git 官網(wǎng)git-scm.com點(diǎn) Downloads下載 64-bit 版本就行。官網(wǎng)有時候連得慢你也可以去一些開源軟件的鏡像站下但注意核對文件名和版本號別下到舊版本或雜牌打包。安裝過程基本是下一步到底但有兩處我建議你手動改一下默認(rèn)編輯器建議選 Visual Studio Code 或 Notepad不要用默認(rèn)的 Vim——你后面真正需要編輯器來寫 commit 信息、解決沖突的時候Vim 會把你勸退。安裝到 Adjusting your PATH environment 那一步選中間項 Git from the command line and also from 3rd-party software。舊版可能顯示為 Git from the command line and also from 3rd-party software新版叫 Git from the command line and also from 3rd-party software總之選帶third-party / 3rd-party的那個。這樣才能保證你在普通的 cmd / PowerShell / 終端里直接敲git命令。選成 Use Git and optional Unix tools from Command Prompt 也行但會把一些 Unix 命令帶進(jìn)來容易和系統(tǒng)命令沖突新手我不推薦。macOS 用戶有兩條路。如果你裝了 Homebrew一條命令搞定brew install git。沒裝 Homebrew 的話在終端里敲git --version很多時候系統(tǒng)會彈窗提示安裝 Command Line Tools確認(rèn)安裝即可。這條路徑裝出來的 Git 版本可能不是最新的但日常使用完全夠。Linux 用戶最省心Debian/Ubuntu 系執(zhí)行sudo apt install gitCentOS/RHEL/Fedora 系執(zhí)行sudo dnf install git裝完就是全局可用的。裝完統(tǒng)一驗證一下git --version看到輸出git version 2.x.x就說明裝好了。如果在 Windows 上提示不是內(nèi)部或外部命令先檢查安裝時 PATH 那一步是不是選對了實在不行注銷一下系統(tǒng)或者重啟終端讓環(huán)境變量生效。2.2 全局配置與身份驗證讓 Git 認(rèn)識你裝好之后千萬別急著建倉庫先把身份信息配置好不然每次提交都會報Please tell me who you are。這里配置的用戶名和郵箱會寫進(jìn)每一次 commit 記錄里團(tuán)隊協(xié)作時隊友就是靠這個識別這段代碼是誰寫的。git config --global user.name 你的名字 git config --global user.email 你的郵箱example.com注意兩點(diǎn)建議。第一郵箱最好用你注冊云端倉庫賬號的那個郵箱這樣提交記錄能正確關(guān)聯(lián)上賬號平臺會在你的提交旁邊顯示更豐富的頭像和資料信息。第二--global參數(shù)表示全局生效它把你的配置寫到了用戶目錄下的~/.gitconfig文件里。如果某個項目需要不同的身份比如給公司項目用公司郵箱可以在項目目錄下不帶--global再執(zhí)行一次項目級配置會覆蓋全局配置。驗證配置是否生效git config --global --listWindows 上如果你想省去每次 push 都輸密碼的麻煩我建議直接往下一節(jié)走用 SSH 方式認(rèn)證。如果你實在想先用 HTTPS 簡單試一把Windows 系統(tǒng)裝 Git 時默認(rèn)會開啟 Git Credential Manager第一次輸入賬號密碼后會被記住后面就不用了。這個方案勝在簡單但對熟悉 Git 的人來說 SSH 才是更省心、干凈的長期方案。2.3 配合 Python 多版本環(huán)境時Git 要避開的坑在這個話題里加上 Python 多版本管理是因為很多跟著教程開發(fā) Python 項目的人近期都遇到過同一類問題本機(jī) Python 3.8測試服務(wù)器 Python 3.10隊友的環(huán)境是 3.11項目拉到各自機(jī)器上總有依賴裝不對。這不是 Git 的問題但如果不處理好會連累 Git 的協(xié)作流程。Git 本身只管代碼文件它不管你機(jī)器上跑的是哪個 Python 版本。出問題的往往是你把本地環(huán)境里的垃圾一并提交到了倉庫——最常見的就是.venv、venv、__pycache__這些文件夾。一個人開發(fā)時問題不大多人協(xié)作時只要有人不小心把虛擬環(huán)境目錄提交進(jìn)去就會帶來一堆平臺相關(guān)的二進(jìn)制文件合并時制造大量無意義的沖突。正確做法是所有與 Python 版本相關(guān)的鎖定信息走配置文件比如requirements.txt、pyproject.toml這些才該進(jìn) Git。如果你用 pyenv 或 conda 管理多版本想要鎖定項目使用的版本可以把.python-version或 environment.yaml 提交進(jìn)去隊友拉下來即可自動對齊。虛擬環(huán)境目錄、緩存目錄一律通過.gitignore排除細(xì)節(jié)我在后面專門有一節(jié)講。所以在我自己的項目里我會保證代碼 依賴聲明 環(huán)境版本聲明三種文件進(jìn)倉庫而任何類似.venv/、__pycache__/的本地產(chǎn)物一律不進(jìn)倉庫。這句話你能聽懂以后換機(jī)器拉代碼就不會被環(huán)境問題折磨得太慘。3. 云端倉庫搭建與 SSH 免密認(rèn)證3.1 云端倉庫怎么選GitHub、Gitee 各自定位聊云端倉庫繞不開兩個平臺。一個是海外的 GitHub全球開發(fā)者集聚地開源項目生態(tài)最豐富把項目推到上面天然就有了跟全世界交流的窗口。另一個是國內(nèi)平臺如 Gitee如果你面向國內(nèi)團(tuán)隊協(xié)作、需要更快的國內(nèi)訪問速度、或者項目交付客戶在國內(nèi)使用起來會更順手。我個人項目怎么選國外開源項目我放 GitHub與國內(nèi)團(tuán)隊交接的項目我放 Gitee。兩個平臺的工作機(jī)理完全一樣學(xué)會了 SSH 配置你在兩家都花不了五分鐘。GitLab 或公司私建的 GitLab 同理只是地址換一下而已配置思路完全相同。創(chuàng)建云端倉庫的操作都差不多登錄平臺點(diǎn) New Repository / 新建倉庫填倉庫名選可見性私有或公開要不要初始化 README我一般建議不初始化等本地項目推上去再說省得先 pull 再 push 的麻煩。創(chuàng)建好后平臺會給你兩個地址HTTPS 地址和 SSH 地址長這樣# SSH 地址示例 gitgithub.com:你的用戶名/倉庫名.git后面所有同步操作都會用到這個地址。別被這一串字符嚇到它只是你在哪臺機(jī)器、哪個賬號、哪個倉庫的定位信息。3.2 SSH 密鑰生成與配置全流程HTTPS 方式每次 push 要輸賬號密碼就算有憑據(jù)管理器在部分場景下也會遇到 token 失效SSH 方式則是靠一對密鑰來認(rèn)證身份配置好之后一勞永逸。這個一勞永逸是值得的因為 Git 的日常操作頻率遠(yuǎn)高于其他登錄操作每次都被攔一道的體驗非常影響心情。第一步生成密鑰。打開終端Windows 用戶可以在開始菜單里搜索 Git Bash用它來執(zhí)行命令輸入ssh-keygen -t ed25519 -C 你的郵箱example.com命令中的-C只是給密鑰加一個注釋標(biāo)簽方便你識別它是誰生成的。敲回車后會問你保存位置直接回車用默認(rèn)路徑~/.ssh/id_ed25519即可如果提示文件已存在說明你之前生成過這時建議不要直接覆蓋另行命名即可。接著會讓你輸入密碼passphrase這一步我建議設(shè)一個簡短好記的密碼短語。有些人嫌麻煩直接留空但這樣一來私鑰文件裸躺在磁盤上別人拿到文件就等于拿到了你的身份建議還是設(shè)一道鎖。第二步把公鑰內(nèi)容復(fù)制出來。公鑰文件是.pub結(jié)尾的那個內(nèi)容是純文本。Windows 上用如下命令查看并復(fù)制cat ~/.ssh/id_ed25519.pub全選復(fù)制這段以ssh-ed25519開頭、以郵箱結(jié)尾的字符串。然后去你的云端倉庫平臺找到設(shè)置里的 SSH Keys / SSH 公鑰配置入口把這段內(nèi)容粘貼進(jìn)去保存。第三步本地訪問云端時要讓 SSH 客戶端知道該用哪把鑰匙。系統(tǒng)有默認(rèn)規(guī)則你生成的文件如果叫id_ed25519大部分場景免配置。你直接測試連接ssh -T gitgithub.com如果平臺是 Gitee就執(zhí)行ssh -T gitgitee.com。第一次連接會詢問是否信任目標(biāo)主機(jī)輸入yes回車即可??吹筋愃七@樣的輸出就算認(rèn)證成功Hi yourname! Youve successfully authenticated, but GitHub does not provide shell access.3.3 SSH 認(rèn)證失敗排查實錄SSH 認(rèn)證失敗是這個環(huán)節(jié)最常見的攔路虎網(wǎng)上搜ssh認(rèn)證失敗 git的人特別多。我把自己踩過和幫別人排查過的幾種情況整理一下。第一種輸出Permission denied (publickey)。整體邏輯是SSH 客戶端發(fā)出了密鑰但云端不認(rèn)可。先檢查你是不是把公鑰貼錯了位置或者貼的時候漏掉了行尾、多復(fù)制了空格再檢查你本地的私鑰路徑和密鑰對是否匹配。第二種本機(jī)有多個密鑰默認(rèn)的id_ed25519不是云平臺里配置的那把。比如你給 GitHub 配了密鑰 A給 Gitee 配了密鑰 BSSH 默認(rèn)會拿第一個密鑰去連所有主機(jī)結(jié)果兩邊都失敗一半或者出現(xiàn)用了 GitHub 的密鑰去連 Gitee的錯亂。這種情況要在~/.ssh/config文件里顯式指定Host github.com HostName github.com User git IdentityFile ~/.ssh/id_ed25519_github Host gitee.com HostName gitee.com User git IdentityFile ~/.ssh/id_ed25519_gitee配置好之后再次ssh -T gitgithub.com它會按文件名精確匹配對應(yīng)的密鑰。第三種Windows 用戶常見的是ssh-agent沒有運(yùn)行或者運(yùn)行時沒有加載密鑰。執(zhí)行eval $(ssh-agent -s) ssh-add ~/.ssh/id_ed25519然后重試。如果是 Git Bash 環(huán)境命令可以直接執(zhí)行如果是 PowerShelleval寫法不適用可以改為用 Git Bash 操作。第四種你明明用的是 HTTPS 地址克隆卻在報 SSH 相關(guān)的錯或者反過來。檢查遠(yuǎn)程倉庫地址到底用的是哪種git remote -v這條命令會列出當(dāng)前項目關(guān)聯(lián)的遠(yuǎn)程地址是git開頭就是 SSH是https://開頭就是 HTTPS。你可以在平臺網(wǎng)頁上復(fù)制對應(yīng)的正確地址然后用下面的命令替換git remote set-url origin gitgithub.com:用戶名/倉庫名.git記住一個核心原則排查 SSH 認(rèn)證問題按密鑰是否存在 → 是否被正確托管 → 是否加到平臺 → 是否連對主機(jī) → 地址是否用對的順序來。按這個順序走一遍大部分問題都能定位。4. 日常同步實操克隆、提交、推送、拉取4.1 從零拉取遠(yuǎn)程項目含 IDEA 操作云端倉庫建好、SSH 認(rèn)證通過接下來就該把項目轉(zhuǎn)到本地了。這里的拉取涉及兩個真實場景一是在新機(jī)器上從零開始獲取項目二是開發(fā)工具里直接打開遠(yuǎn)程項目。新機(jī)器上獲取項目非常直接在終端里執(zhí)行g(shù)it clone gitgithub.com:用戶名/你的項目.git執(zhí)行后項目會出現(xiàn)在當(dāng)前目錄以倉庫名命名。這個命令不僅把當(dāng)前最新代碼拉了下來還把云端上全部完整的歷史記錄、全部分支信息一并拉了下來。也就是說從這一刻起你本地就是一份完整的倉庫不只是當(dāng)前文件那么簡單。如果你用的是 IntelliJ IDEA 或 PyCharm 這類 JetBrains 系的 IDE流程也一樣絲滑打開 IDEA選擇File - New - Project from Version Control在彈出的對話框里粘貼倉庫的 SSH 地址點(diǎn)擊 Clone。IDEA 會自動完成認(rèn)證和導(dǎo)入之后你在底部工具欄的 Git 面板里就能看到版本歷史、分支列表和變更列表。這里我要提醒一下首次 Clone 大項目時IDEA 可能會彈出Trust Project對話框一定要先確認(rèn)項目來源沒問題再確認(rèn)信任。Clone 下來后建議先看一眼git status正常輸出Your branch is up to date with origin/main.之類的提示就說明本地和遠(yuǎn)程是同步的。4.2 核心命令串講add / commit / push / pull日常用 Git翻來覆去就四個命令add、commit、push、pull。我用一個生活化的場景給你串一遍你想把一排新做的產(chǎn)品圖放進(jìn)商場展示柜。add是把產(chǎn)品從箱子搬到展示區(qū)暫存區(qū)commit是拍照存檔記錄這批產(chǎn)品于此刻擺在展示區(qū)編號是多少push是把展示區(qū)的照片和產(chǎn)品運(yùn)送到總店云端倉庫pull是從總店拉取最新的展出清單到本地分店。實操中我先改代碼然后看變更git status會列出所有有變動的文件用紅色標(biāo)記未暫存、綠色標(biāo)記已暫存。然后逐批或全量添加git add .這個.表示當(dāng)前目錄下所有未被忽略的改動。也有人愛用git add -A效果類似但會在某些邊界場景多處理一些刪除和重命名新手先用git add .最不容易踩坑。接著提交git commit -m feat: 新增用戶登錄接口-m后面是提交信息。書寫上我給你一個能立刻提升觀感的格式前綴 簡短描述前綴如feat新功能、fix修 bug、docs文檔、refactor重構(gòu)、chore雜務(wù)。這條習(xí)慣會讓以后翻歷史記錄時爽到飛起。提交后本地歷史已經(jīng)記錄本次快照但云端還沒有執(zhí)行推送git push origin main這里的origin是遠(yuǎn)程倉庫的默認(rèn)別名main有的項目仍叫master是你要推送的分支名。推送成功后就完成了云端也更新一份的動作。反過來當(dāng)你在另一臺機(jī)器上或隊友已經(jīng)推了新提交本地需要同步時執(zhí)行g(shù)it pull origin main這條命令會拉取遠(yuǎn)端最新提交并合并到當(dāng)前分支。我給你的日常節(jié)奏建議是動手改代碼之前先git pull一次盡量在最新代碼基礎(chǔ)上改少做與別人改動沖突的無用功。4.3 .gitignore 的正確打開方式這節(jié)單獨(dú)拿出來講是因為幾乎每個新手都會在不該提交的文件上栽跟頭。.gitignore是倉庫根目錄下的一個純文本文件只要把文件路徑或匹配模式寫進(jìn)去Git 就會自動無視它們。比如 Python 項目一份可用的 .gitignore# 虛擬環(huán)境與緩存 .venv/ venv/ __pycache__/ *.py[cod] *.so # 依賴目錄如用了 npm / 某些包管理器 node_modules/ # IDE 本地配置 .idea/ .vscode/ # 系統(tǒng)文件 .DS_Store Thumbs.db # 環(huán)境變量與密鑰文件 .env *.local看到*.env我多說一句千萬別把含密鑰、數(shù)據(jù)庫密碼、API Key 的 .env 文件提交進(jìn) Git 倉庫。哪怕倉庫是私有的也不行因為一旦提交記錄里出現(xiàn)過密鑰它就永久留在歷史中了后續(xù)即使刪除文件密鑰也已經(jīng)泄露。正確姿勢是把.env.example作為模板提交大家各自復(fù)制為.env并填入本地值。判斷你的 .gitignore 是否生效可以執(zhí)行g(shù)it status如果原來會出現(xiàn)的__pycache__/、.venv/等條目不再出現(xiàn)就說明規(guī)則正確。如果某個文件已經(jīng)被提交過再寫進(jìn) .gitignore 并不會讓它從倉庫中消失要先把文件從 Git 的追蹤列表里移除git rm -r --cached .venv加了--cached是只移出追蹤記錄、保留本地文件。這個操作執(zhí)行后提交一次云端倉庫里的垃圾就從歷史文件里清掉了。5. 分支管理與合并團(tuán)隊協(xié)作的關(guān)鍵5.1 分支的本質(zhì)與常用工作流分支是 Git 里鼓噪最兇、也最常被講玄乎的概念。我的理解用一個類比就夠分支就是平行的實驗臺。你在這張臺上怎么折騰都不會影響主實驗臺上的穩(wěn)定狀態(tài)main/master 分支。等實驗成功再把成果合并回主臺。單人開發(fā)時分支一樣值錢。比如我要給項目加一個登錄功能我會先建一個功能分支在這個分支上安心寫代碼即便寫崩了也不會污染主分支git switch -c feature/login這條命令創(chuàng)建并切換到一個名為feature/login的分支等價于老寫法git checkout -b feature/login。開發(fā)完成后回到主分支git switch main每次切換分支工作目錄里的文件會跟著變化——這正是分支平行世界的效果。所以切換前要養(yǎng)成git status看一眼的習(xí)慣確保沒有未提交的改動。團(tuán)隊協(xié)作的常見姿勢是主分支保持穩(wěn)定可運(yùn)行的版本功能分支各自開花合并時通過 code review 把關(guān)發(fā)版時打 tag標(biāo)簽。這套流程叫 Git Flow 的簡化版不用搞得那么重但主分支不亂來、功能分支隨便玩這兩條底線我建議每個人、每個團(tuán)隊都堅持。5.2 分支合并實操與沖突解決功能在feature/login開發(fā)完需要合并到 main。先切回 main 并保證本地最新git switch main git pull origin main然后執(zhí)行合并git merge feature/loginGit 會分析兩個分支的歷史把 feature 分支的改動并入 main。如果沒有內(nèi)容矛盾它會自動創(chuàng)建一個合并提交或者走 fast-forward快進(jìn)合并——相當(dāng)于 main 直接跳到 feature 的頂端歷史呈直線。這都很順暢真正讓人頭疼的是沖突。沖突的本質(zhì)是兩個分支改了同一文件的同一位置Git 不知道該聽誰的只能把選擇權(quán)交給你。合并時 Git 會提示CONFLICT (content)并在沖突文件里插入標(biāo)記長這樣 HEAD 這里是 main 分支上的內(nèi)容 這里是 feature/login 分支上的內(nèi)容 feature/login你需要做的是打開文件刪掉、、這三行標(biāo)記保留你認(rèn)為應(yīng)該保留的代碼或者兩邊內(nèi)容都保留并做整合保存文件然后git add 沖突文件名 git commit -m merge: 解決登錄功能沖突沖突文件不要怕處理一次就明白了。我個人經(jīng)驗是解決沖突前先整體讀一遍兩邊的改動邏輯再決定怎么合并別只盯著局部。有些沖突表面上是同一行背后其實是對同一邏輯的兩種實現(xiàn)思路這種時候最好跟改動雙方溝通一下。如果是遠(yuǎn)程倉庫在你 push 之前被別人更新了push 會被拒絕這時你需要先git pull --rebase或git pull把遠(yuǎn)端最新內(nèi)容拉下來整合再重新 push。6. 常見問題速查與我的避坑建議6.1 高頻問題速查表把日常答疑中最高頻的幾個問題整理成表你遇到直接對號入座現(xiàn)象大概率原因解決辦法push 提示Permission denied (publickey)私鑰未加載或未加入平臺檢查~/.ssh/id_ed25519.pub是否已粘貼到云平臺本地ssh-add重新加載push 被拒絕non-fast-forward遠(yuǎn)程有新提交本地沒有先git pull origin 當(dāng)前分支同步再 pushcommit 時提示Please tell me who you are未配置用戶信息git config --global user.name/user.emailgit add .沒反應(yīng)、文件不在列表.gitignore 將其忽略了檢查 .gitignore 規(guī)則文件已提交后寫進(jìn) .gitignore 仍被跟蹤文件已在 Git 追蹤列表執(zhí)行g(shù)it rm -r --cached 文件路徑后提交clone 項目后 IDEA 大量報錯環(huán)境未對齊Python 版本、依賴缺失按 requirements.txt / pyproject.toml 重建虛擬環(huán)境command not found: git安裝后未生效或未安裝成功重啟終端Windows 檢查 PATH多密鑰互串連 A 平臺用 B 密鑰未指定 IdentityFile在~/.ssh/config中為各主機(jī)顯式指定密鑰這些問題的共同點(diǎn)在于原因都藏在配置里而不是命令里。所以排查時不要急著重裝 Git先看配置、看遠(yuǎn)程地址、看密鑰加載情況。6.2 幾條用真金白銀換來的經(jīng)驗最后分享幾條我這些年實際踩過坑后才總結(jié)出來的規(guī)矩它們不教條但每條背后都有真實的教訓(xùn)。第一養(yǎng)成先 pull 再動手的習(xí)慣。我的標(biāo)準(zhǔn)動作是打開項目、切到目標(biāo)分支、git pull、確認(rèn)干凈后開始寫代碼。每天第一次打開項目這也做。就這一個動作大概率能避開 80% 的合并沖突。第二提交信息寫清楚別偷懶寫 update。有一次我翻近一個月的提交記錄排查一個回歸問題如果每條都寫update我大概會提交完當(dāng)場崩潰。寫清楚做了什么、為什么對自己的項目復(fù)盤和團(tuán)隊的 code review 都是巨大的便利。第三大文件不要進(jìn) Git 倉庫。模型文件、數(shù)據(jù)集、二進(jìn)制資源、視頻這些動輒幾百 MB 的貨色會讓倉庫體積迅速膨脹clone 體驗極差。它們應(yīng)該走獨(dú)立的文件存儲方案倉庫里只放它們的下載腳本或說明文檔。這幾年我見過太多團(tuán)隊因為把大數(shù)據(jù)文件塞進(jìn) Git倉庫幾個 GB 大后續(xù)每次 clone 都像受刑。第四關(guān)鍵時刻多打 tag。項目發(fā)布、交付一個穩(wěn)定版本時執(zhí)行g(shù)it tag v1.0.0并推送這個版本就被永久記住了。以后出了任何問題說回到 v1.0.0比回到某年某月那次提交可靠一百倍。我在實際使用中最大的感受是Git 和云端倉庫的這套組合最值錢的不是省了多少備份工夫而是它帶來的安全感和確定性。你不用擔(dān)心改壞不用擔(dān)心丟代碼不用擔(dān)心溝通混亂每一次改動都有跡可循。把這套流程跑通之后你大概率會和我一樣再也回不到那個用文件夾管理版本的時代了。