ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

SourceTree从安装到日常使用:可视化Git工作流完整指南

SourceTree从安装到日常使用:可视化Git工作流完整指南 用到Git已经好几年了从一开始的命令行“一把梭”到后来项目一多、分支一乱加上时不时冒出来的文件冲突说实话挺折磨人的。后来换成SourceTree把提交、分支、合并、贮藏这些高频操作全部可视化鼠标就能点完整个工作流一下子清爽了很多。这篇就把SourceTree下载、安装到日常使用这一整套流程完整过一遍适合刚接触Git的小白也适合用命令行用得心累、想换个顺手工具的老手。你不需要背任何命令跟着操作就行。之所以不直接拿命令行说事是因为SourceTree解决的根本不是“效率”问题而是“心智负担”问题。图形界面能把仓库状态、文件改动、分支关系全部摊开给你看尤其在多人协作的时候一眼看清楚谁改了什么、冲突在哪里比反复敲git status和git diff要直观得多。这篇文章我按“选型思路 → 安装流程 → 高频操作 → 排查手法”这四个块展开每个环节都把坑点标出来尽量让你在第一次接触SourceTree的时候少走弯路。1. 先说清楚SourceTree到底解决什么问题1.1 为什么我推荐用图形化Git客户端很多人一开始学Git都是被命令行劝退的。rebase、cherry-pick、stash这些概念本身不难难的是你在终端里看不到仓库的全貌。你只能靠命令输出脑补当前状态一旦分支多了、改动的文件多了很容易就晕了。SourceTree最大的价值就是把仓库变成一张图分支、提交、标签、远程状态全是可视化的操作一下能立刻看到结果这对建立Git的“直觉”特别有帮助。我自己用得最多的场景是改Bug。项目切到develop分支新建一个fix/login-error分支改两行代码提交再切回去合并。这一套流程在SourceTree里就是双击分支切换 → 点“提交”按钮 → 勾选文件 → 填提交信息 → 点“推送”。每一步都有明确反馈错了也能在图形上看到记录安全感高很多。还有一个关键场景是Code Review。SourceTree里可以选中任意两次提交做对比改动行、新增行、删除行都标得清清楚楚。配合提交信息看别人的代码很快就能理解这次改动的意图比在网页端一个一个点方便得多。1.2 SourceTree和其他Git客户端的选型对比市面上常见的Git图形客户端还有GitHub Desktop、GitKraken、TortoiseGit以及VS Code自带的Git插件。我列个简单的对比方便你做选择客户端优点缺点适合人群SourceTree免费、跨平台、分支图直观、内置Git Flow首次配置稍复杂、启动偏慢刚入门到进阶的用户GitHub Desktop界面极简、上手最快只能充分配合GitHub只支持Git只和GitHub打交道的新手GitKraken界面好看、功能强收费、免费版限制多愿意为体验付费的用户TortoiseGit和Windows资源管理器集成界面老、右键菜单易乱Windows老用户VS Code Git插件和编辑器一体、方便功能较弱、复杂操作仍需命令行日常在VS Code里写代码的开发者我选择SourceTree主要看重三点第一它免费个人和商用都免费第二它同时支持Windows和macOS换电脑不用重新适应第三它的分支图做得非常清楚适合可视化理解Git的工作流。当然我不是说命令行没用恰恰相反有些操作比如交互式rebase、子模块操作在命令行里更利索但日常80%的Git操作用SourceTree真的足够了。2. SourceTree下载与安装从官网到本机完整流程2.1 官网下载时的3个关键细节下载SourceTree的第一步当然是去官网。我这里要提醒三个细节很多人第一次都会在这上面栽跟头。首先认准官方网站不要从乱七八糟的下载站下。下载站往往捆绑其他软件或者提供的是旧版本。我在实际排查中见过不少用户电脑里装的是 SourceTree 3.x 老版本和系统里新装的Git 2.4x 存在兼容问题最后重新从官网下载最新版就正常了。官网首页很显眼的位置就是“Download for Windows”和“Download for macOS”两个按钮系统会自动识别你的操作系统。其次是版本选择。Windows下SourceTree一个比较大的变化是新版本默认内置了Git不再强制依赖系统里的Git。这意味着你可以直接“开箱即用”不用先装Git再装SourceTree。但如果你和我一样习惯在命令行里也使用Git建议还是额外装一个独立Git并在SourceTree里指定自己更习惯的Git版本。这个在后续配置里说。第三个细节是下载后的文件校验。哪怕是从官网下载下载完之后也建议对照一下文件大小和发行说明。这不是小题大做而是因为SourceTree安装包经常达到100MB级别网络波动很容易导致下载不完整表现为安装到一半报错。如果你发现安装包解压或启动安装程序时提示文件损坏直接删掉重新下载比强行修复省时间。2.2 一步步完成安装与账号衔接安装本身没什么玄学双击安装包一路“Next”就行但有几个选项值得留意。到了“Select Additional Tasks”这一步SourceTree问你是否想创建桌面快捷方式和命令行快捷方式。我建议两个都勾上。命令行快捷方式的意思是你可以在任意终端里快速输入sourcetree来打开当前目录对应的仓库这个功能在后续实际使用中特别方便尤其是在你用VS Code或者其他工具的命令行时敲一下就能直接打开SourceTree看当前仓库状态。首次启动时会要求你登录Atlassian账号。这一步相当于激活你必须要有一个账号注册是免费的。很多人卡在这一步是因为网络环境不稳定登录窗口一直转圈。遇到这种情况不要反复重试先把页面关掉重新打开SourceTree在登录界面选择“Use an existing account”再输入你的Atlassian用户名和密码通常第二次就能成功。如果你实在注册不了Atlassian账号也还有一条路安装SourceTree家庭版时可以直接跳过登录但是功能上会有一定限制弹出的升级提示也多一些体验稍差。安装完成之后SourceTree会提示你选择Git版本。如果你已经装了独立Git这里会显示两个选项一个是SourceTree内嵌的Git一个是系统检测到的Git。我建议选系统已有的Git因为命令行和图形界面保持同一个Git版本可以避免后面出现“图形界面能提交命令行却不能用”这种奇怪问题。2.3 安装后的第一件事配置用户名和邮箱装好SourceTree不等于可以马上用你不配置提交人信息后面每次提交都会报错。很多新手第一次提交就遇到Please tell me who you are根源就在这里。在SourceTree顶部菜单栏找到“工具 → 选项 → 一般”在“默认用户信息”区域填写你的用户名和邮箱。这里的用户名不是登录SourceTree的账号名而是Git提交记录里显示的作者名字一般建议用你的真实姓名或项目组约定的代号邮箱随意但最好能联系到你。如果不设置Git的提交记录里会出现一个自动生成的随机用户名后面排查问题非常麻烦。注意如果你的电脑上已经用命令行配置过Git的user.name和user.emailSourceTree会默认读取全局配置文件所以理论上可以不用重复配置。但实操中发现SourceTree偶尔会读不到全局配置尤其是在Windows环境下。我的做法是直接在SourceTree里再配置一次反正不冲突还能避免漏配。另外我一般把“默认用户信息”下方的“全局”勾选上这样所有仓库都会统一使用这一份信息。如果你在不同项目里需要不同身份可以不勾选“全局”在每个仓库的“仓库设置 → 高级”里单独配置。这个看个人习惯。3. 五个高频使用场景从克隆到合并一遍过3.1 克隆远程仓库到本地克隆远程仓库是你接手一个项目时做的第一个操作。在SourceTree里就是“文件 → 克隆/新建”弹窗里有几栏要填源URL远程仓库地址例如https://github.com/xxx/project.git或者SSH格式的gitgithub.com:xxx/project.git。目标路径你要存到本地的文件夹路径注意这个路径不能是某个已存在的Git仓库内部路径。名称SourceTree默认会帮你填成仓库名一般不用改。详细设置里的“克隆类型”只要不是特别大的仓库保持默认“完整克隆”就行。我几乎每次推荐别人用SourceTree都是从克隆开始就是这个环节非常直观。你把URL粘进去填好本地路径点“克隆”SourceTree会把远程分支、标签都拉下来然后在分支图上画出本地的main或master分支同时显示origin/main的远程跟踪分支。整个过程相当于把git clone、git fetch和一些初始化操作合并成了一次点击。说到克隆有一个坑非常常见把官方仓库克隆在了一个远程仓库原本就存在的代码的同名目录里然后弹出“目标路径不是空目录”。Git要求克隆目标目录必须是空的或者不存在。解决办法很粗暴先新建一个空文件夹作为目标路径或者换一个目录名。3.2 提交与推送暂存区到远程仓库克隆完成后修改文件SourceTree的文件状态面板会显示所有有改动的文件文件和文件名前面有一个小图标用颜色区分已跟踪文件显示修改状态黄色/红色新文件显示问号或加号。提交在SourceTree里的逻辑是第一步选中你要提交的文件点击“暂存所有”或者只暂存某几个文件。暂存这个动作很多人一开始不理解我换个说法暂存区就是“我要提交哪些文件的临时列表”。你可以在几十个改动文件里只挑出两个与本次需求相关的文件提交剩下的留到下一次提交这样提交历史会非常整洁。第二步在图下方“提交信息”框里写清楚本次改动内容。我自己的习惯是推荐用一句话概括“做了什么”例如“修复登录页面密码框回显Bug”而不是“修改文件”。好的提交信息在项目回滚时会帮你大忙。第三步点击“提交”。此时SourceTree只会在本地生成提交记录并不会自动推到远程。如果你希望commit push一步到位在提交按钮旁边有个下拉箭头选择“提交并推送”。推送之前点一下“拉取”按钮把远程最新代码先合并到本地能减少很多冲突。我见过太多人直接改完就推送结果远程代码已经被别人更新了推送被拒然后一脸懵。先把远程拉一遍再推是团队协作里最基础的习惯。3.3 分支操作与合并看图和点按钮的乐趣分支在SourceTree里就是“分支”按钮位于顶部工具栏。点开后输入新分支名称比如feature/user-login然后确保“从当前分支或提交创建”里选的是当前检出的分支。创建完分支之后SourceTree会立刻自动切换到新分支。这个逻辑和命令行里git checkout -b new-branch是等价的。分支之间的切换在SourceTree里只需要双击分支图上的某个分支名即可。注意切换分支之前一定要确保当前工作目录是干净的或者你有未提交的改动但你知道自己在做什么。如果工作区有不干净的改动而目标分支和当前分支有冲突SourceTree会弹窗提示你“请先提交或贮藏文件”。这个提示不是废话是保护机制。合并分支是另一个高频操作。比如你完成了一个feature分支的开发要合回dev先双击切到dev分支然后在图上右键点击feature分支选择“合并feature到当前分支”。之后SourceTree会尝试自动合并如果多个地方改了同一个文件就会弹出冲突提示。这个时候你不要慌双击冲突文件SourceTree会打开一个合并视图左右分别是两个分支的版本下面是合并后的编辑区。你需要手动选择保留哪些改动最终保存然后提交这个合并。处理冲突的核心原则是先确认哪一边的改动是对的需求再动手。宁可多看几遍两侧代码也不要凭感觉乱删。我早期处理冲突犯过的最大错误就是把对方的改动覆盖掉了后来在团队里被同事提醒才意识到“冲突解决”本质上是沟通问题不是工具问题。3.4 贮藏Stash功能尤其是如何贮藏新加的文件说到贮藏这是SourceTree被问得最多的功能之一。很多人在开发过程中会突然被打断正在改一个功能改到一半要切到别的分支去紧急修复一个Bug。此时工作区里还有未提交的改动直接切换分支可能会造成改动丢失或影响目标分支的代码。这时就应该用到“贮藏”。点击“贮藏”按钮SourceTree会把你工作区未提交的改动临时保存成一个快照然后工作目录变回干净状态你就可以安全地切换分支了。等回来时再点击“贮藏”按钮右侧的下拉箭头选择“应用贮藏”或“弹出贮藏”就能把改动取回来。一个大家经常忽略的细节是SourceTree默认贮藏的是“已跟踪文件”的改动新加的文件未跟踪文件不会默认进入贮藏栈。也就是说假如你新建了一个config.local.js文件还没有执行过git add你点击“贮藏”时这个文件会原封不动地留在你的工作区不会被临时保存起来。如果这个时候你切到其他分支这个新文件就会跟着你到其他分支非常混乱。解决办法是点击“贮藏”按钮旁边的下拉箭头在弹出的“贮藏”对话框里勾选“保持未暂存文件”或者“包含未跟踪文件”不同版本叫法略有差异再执行贮藏。实际操作中我每次按贮藏键之前都会先看一眼文件状态面板确认有没有“”状态的新文件有的话就先把它纳入暂存或单独处理再贮藏。这个小习惯能帮你避免不少“切换分支之后文件凭空消失/突现”的诡异问题。如果你已经踩坑了比如你贮藏了新文件但忘记勾选结果文件留在工作区被带到了另一个分支你可以把这个文件复制到仓库外面再切回原分支放回原路径。虽然绕但能救回数据。更有经验的习惯是新文件先提交到一个临时分支或者直接勾选“包含未跟踪文件”。3.5 回退与撤销用图形界面切除坏代码代码出错了想回到之前的某个提交这是很常见的需求。SourceTree的“回退”按钮在右上角有两种选择“回退提交”生成一个新的提交反向执行目标提交的改动。适合已经推送到远程的场景属于“留痕式”撤销团队里其他人拉到新提交就知道你回退了。“将当前分支重置到此提交”直接删除目标提交之后的提交记录把分支指针移回去。适合还没推送的本地提交但慎用一旦重置并推送到远程会引发团队协作冲突。我在本地做实验代码时经常用“重置到提交”只要没有推送随便折腾。但如果代码已经推送到了远程绝不要在本地轻易重置更好的做法是用“回退提交”。还有个“丢弃”操作在工作区文件状态的右键菜单里。选“放弃”会把你对这个文件的所有未提交改动扔掉恢复到最近一次提交的状态。这个操作是不可恢复的对话框里会确认弹窗但我见过不少人没细看就点确定。我的建议是重要文件可以先用文件历史对比看一眼再决定要不要丢弃。4. 常见问题与排查技巧实录4.1 下载速度慢、安装包打不开怎么处理SourceTree安装包体积不小网络不稳定确实容易下到一半失败。如果卡在下载阶段可以考虑换个时段重试或者检查本地是否有下载工具接管了下载链接。更常见的问题是下下来的文件是一个无法识别的文件格式原因多半是浏览器把它下载成了.html或者没有扩展名。这种情况直接改扩展名是不行的重新下载更靠谱。安装过程中偶尔会弹出“.NET Framework 版本不足”之类的提示尤其出现在老旧的Windows 7/8系统上。去微软官网把对应版本的.NET Framework装上再重装SourceTree即可。如果你的系统实在过旧SourceTree新版可能不支持新版本这时需要下载历史版本但我还是建议升级系统现代开发工具对老系统支持越来越差。4.2 关联本地已有仓库失败“SourceTree关联本地仓库”是热搜词里很高频的一个场景很多人本地已经有一个项目目录但不知道这个目录已经是Git仓库或者想用SourceTree打开本地目录但找不到入口。两个常见路径。如果你的本地目录已经是Git仓库有.git文件夹那么在SourceTree里用“文件 → 打开”直接选中该目录即可SourceTree会自动识别它是仓库并加载分支图。如果你的目录还不是Git仓库需要先初始化在“文件 → 克隆/新建”里选择“新建仓库”在“目标路径”里选中你的项目目录点击“创建”即可。这个操作等效于在命令行执行git init只是SourceTree帮你做了。经常出问题的点在中文路径。SourceTree对中文路径的处理历史上有一些Bug虽然新版本改善了很多但仍然建议项目目录尽量使用英文名称。如果遇到“打开仓库时文件列表为空”或者“无法显示提交历史”先检查路径里有没有空格或中文再检查是不是忘了初始化Git。4.3 SSH认证失败与远程推送被拒使用SSH方式连接远程仓库时SourceTree偶尔会报“The servers host key is not cached in the registry”或“Permission denied (publickey)”。这两个问题的本质不一样第一个表示你没有把远程服务器的宿主密钥加入本机信任列表通常在第一连接时可以勾选“是信任该主机”。如果你选过“否”或弹窗没有出现可以打开SourceTree自带的终端执行ssh-keyscan github.com %USERPROFILE%/.ssh/known_hosts这样的命令把密钥缓存进去然后重新拉取。注意不同代码托管平台的地址不同不要硬抄。第二个通常是SSH私钥没有被SourceTree加载。最简单的排查方法打开SourceTree里的“终端”执行ssh -T gitgithub.com如果返回欢迎信息说明SSH配置没问题如果提示权限拒绝说明你需要在SourceTree里配置SSH密钥路径。在“工具 → 选项 → 一般 → SSH客户端配置”里选择SSH密钥对应的文件路径并在“SSH客户端”选择“OpenSSH”保存后重新尝试连接。我个人的习惯是SSH密钥全部放在~/.ssh目录并且文件名都用默认的id_rsa很少自定义文件名避免SourceTree多个仓库读密钥时找错位置。如果你有多个密钥对应不同平台比如一个GitHub、一个GitLab可以借助~/.ssh/config文件来指定这个我自己踩过几次坑之后觉得非常值得学习。4.4 提交历史里的中文乱码提交信息或文件名在SourceTree里显示成乱码是Windows用户的老问题。这个现象通常源于字符编码不一致。Git在Windows上默认使用GBK处理一些文本而SourceTree按UTF-8解析两边的“方言”对不上自然满屏乱码。解决办法在SourceTree“工具 → 选项 → 一般”里把“提交信息编码”选为UTF-8。如果还是乱码可以检查全局Git配置里有没有设置过core.quotepath false这个配置命令是git config --global core.quotepath false设置后文件名里的中文会按原始字符显示不会转义成八进制数字。需要注意的是这个命令是在命令行里执行的但改完立即作用于SourceTree因为它读取的是同一份全局配置。如果仓库里已经积压了一批乱码提交那只能通过git filter-branch或git rebase去改历史复杂度比较高一般不建议普通用户动除非团队真的需要干净的历史。做好预防比事后修复更重要。4.5 贮藏了却发现文件不见了这个警告值得单独拿出来说。很多人会用贮藏功能保存当前工作进度结果切走再切回来发现“贮藏列表”是空的或者新加的文件不见了。这通常不是SourceTree的Bug而是前面提到的“未跟踪文件默认不会被贮藏”。针对已经发生的情况处理方法如下如果你贮藏后新加文件还留在工作区你切去其他分支文件跟着过去了你只能在目标分支看到它而“贮藏列表”里反而没有它。这时请把这个文件手动复制出来切回原分支再放回原路径。如果你连文件都不见了那大概率是被你当时勾选了“丢弃”或“撤销”吃掉基本无法恢复。这个教训我吃过一次所以现在只要看到新文件问号状态我都会下意识地复制一份到仓库外备份。提示SourceTree的“贮藏”功能不像提交那样有完整的历史记录。贮藏栈是跟着本地仓库走的一旦重置仓库或者删除.git目录所有贮藏内容都会丢失。重要的开发进度宁可用临时分支提交也不要只扔在贮藏栈里。4.6 其他几个容易忽略的小问题除了上面这些还有几个小问题虽然出现频率不高但一出就让人抓狂。SourceTree启动白屏或卡在加载界面多数时候和网络请求、代理设置、系统字体有关。先尝试“工具 → 清除已保存的认证”或者重置SourceTree的设置目录如果无效再卸载重装。Windows下SourceTree设置目录一般在%APPDATA%\SourceTreemacOS在~/Library/Application Support/SourceTree。删除这个目录等于恢复出厂设置但也会清空你保存的账号信息操作前记得先备份。推送时提示“无法锁定文件”说明本地的Git进程被其他工具占用比如正在后台运行的索引进程。关闭IDE或者终端里正在执行的Git操作再重试即可。SourceTree突然无法打开任何仓库提示“这是一个无效的源路径”多半是某个仓库的.git目录损坏或者是磁盘权限问题。在系统文件管理器中检查仓库文件夹的权限并用SourceTree自带的“终端”执行git status能帮你定位问题出在SourceTree还是仓库本身。5. 把SourceTree和命令行结合起来用效率才会真正起来写到这里我其实最想分享的一个观念是SourceTree和命令行不是对立关系而是互补关系。SourceTree负责“看懂”仓库和完成日常高频操作命令行负责“精准”处理SourceTree界面里不好做的复杂操作。你在SourceTree里点到“终端”按钮它会打开一个当前仓库路径的命令行窗口你可以直接敲git log --oneline --graph --all看精简的分支图也可以执行git stash list查看贮藏栈里到底还有哪些东西。这种“界面为主、命令为辅”的用法是我个人最推荐的组合。你可以不用背参数但你知道有这些命令存在关键时刻会用就行。最后再分享一个小技巧如果你团队里不同人的SourceTree版本差异较大建议统一约定一个最低版本尤其是多人协作时旧版本对远程仓库的新特性支持可能不完整。把SourceTree升级这件事纳入新电脑环境初始化清单里也是减少办公室环境差异带来的沟通过成本的重要一环。毕竟工具顺手了你才能真正把精力放在代码和需求上而不是被版本管理折腾得焦头烂额。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进