尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

SourceTree 安装配置与首次提交完整指南:从下载到 SSH 密钥避坑

SourceTree 安装配置与首次提交完整指南:从下载到 SSH 密钥避坑 Git 客户端这个领域图形化工具换了一茬又一茬但 SourceTree 始终是绕不开的一个。它免费、跨平台、对 Git 和 Mercurial 都有支持界面把暂存、提交、分支、合并这些操作做得足够直观对刚接触版本控制的人相当友好。不过它的安装和初始配置环节恰恰是新手最容易卡住的地方——从官网下载时的网络问题到首次启动要求登录账户再到 SSH 密钥到底该用 PuTTY 格式还是 OpenSSH 格式每一步都有人踩坑。这篇内容就是围绕 SourceTree 从下载、安装到跑通第一次提交的完整链路展开把每个环节背后的原因讲清楚同时把我在实际配置中反复验证过的做法和容易忽略的细节一并写出来。不管你是刚学 Git 命令、想找个可视化工具辅助理解还是团队里需要统一客户端环境都可以按这篇的节奏走一遍。1. 装之前先想清楚为什么是 SourceTree 而不是命令行1.1 图形化客户端解决的真实痛点很多人学 Git 的第一反应是背命令git add、git commit、git push一条条敲。命令行的好处是精确、可脚本化但它在两个场景下效率明显偏低一是查看历史提交的树状结构二是处理冲突和选择性暂存。SourceTree 这类客户端把提交历史画成可视化的分支图每个提交节点、每次合并的来龙去脉一目了然这对理解 Git 的分支模型帮助极大。另一个实际价值是行级暂存——你可以只把某个文件里的一部分改动加入本次提交剩下的留着下次这个操作在命令行里要靠git add -p交互完成在图形界面里点几下就行。从团队协作角度看统一使用 SourceTree 还有个隐性好处大家对当前处于哪个分支哪些文件已暂存本地领先远程几个提交这些状态的认知是一致的减少了沟通成本。命令行高手当然可以继续用自己的方式但当一个团队里有新手时一个直观的客户端能显著降低入门门槛。1.2 SourceTree 的版本选择与系统要求SourceTree 目前主要维护 Windows 和 macOS 两个版本Windows 版对系统版本有一定要求较新的版本在 Windows 10 和 Windows 11 上运行最稳定。下载时要注意区分安装版和便携版便携版适合放在 U 盘里随身携带但配置不会自动同步。安装包体积不大几百兆的量级但安装过程中它会顺带检查并引导你安装 Git 本身——这一点很关键SourceTree 自己不带 Git 内核它只是一个壳底层调用的还是系统里的 Git。提示如果你的机器上已经装过 GitSourceTree 安装时会自动识别如果没装它会提示你下载内嵌版本的 Git。我个人的建议是单独安装一份官方 Git而不是用内嵌版因为独立安装的 Git 在命令行里也能用配置路径更清晰后续排查问题方便得多。1.3 下载环节的网络现实与应对官网下载慢或者打不开是很多人遇到的第一个拦路虎。这不是 SourceTree 独有的问题而是访问境外资源时的普遍现象。应对方式有几种一是换个时间段重试网络拥堵有明显的时间规律二是使用国内的开源镜像站点很多高校和企业都维护了常用开发工具的镜像三是如果公司有内部软件源优先从内部源获取。需要强调的是下载完成后务必核对安装包的完整性最稳妥的方式是对比官方公布的校验值避免拿到被篡改的安装包。2. 安装过程中的分岔路口Git 与 PuTTY 的取舍2.1 安装向导里那几个容易点错的选项SourceTree 的 Windows 安装向导整体是下一步式的但中间有几个选项值得停下来看一眼。第一个是是否安装内嵌 Git前面说过建议选否或跳过自己单独装。第二个是是否安装 Mercurial如果你只做 Git 项目这个可以不装省得占空间。第三个是是否安装 PuTTY这个选项是新手最容易忽略、后面又最容易出问题的地方。PuTTY 在这里的作用是提供 SSH 密钥的生成和管理能力。SourceTree 在 Windows 上默认使用 PuTTY 格式的密钥.ppk文件而 Git 命令行和大多数代码托管平台默认使用 OpenSSH 格式的密钥id_rsa这类。这两种格式不通用这就是为什么很多人在 SourceTree 里配好了密钥一到命令行就提示权限拒绝或者反过来。安装时如果勾选了 PuTTYSourceTree 会一并装上 PuTTYgen 这个密钥生成工具后面配置 SSH 时会用到。2.2 首次启动的账户登录能跳过就跳过SourceTree 首次启动会要求你登录 Atlassian 账户或者连接 Bitbucket、GitHub 等托管平台。这一步对很多人来说是卡点因为注册和登录本身可能又涉及网络问题。实际上这个登录不是必须的。界面上有一个不太显眼的跳过或使用现有账户的选项点进去可以选择稍后配置。跳过登录完全不影响本地仓库的使用你依然可以克隆、提交、推送只是少了和 Bitbucket 的深度集成而已。我见过不少人卡在这一步以为不登录就用不了其实完全没必要。跳过之后进入主界面通过工具 - 选项里的设置一样可以后续绑定各个托管平台的账户。2.3 安装完成后的第一件事确认 Git 路径安装完 SourceTree 后别急着建仓库先去工具 - 选项 - Git里确认一下 Git 的路径指向。如果你单独装了 Git这里应该指向你安装目录下的git.exe比如C:\Program Files\Git\bin\git.exe或cmd\git.exe。如果这里显示的是 SourceTree 内嵌的 Git而你想用自己装的那份就手动改过来。这个路径设置看起来不起眼但它决定了 SourceTree 底层调用的是哪个 Git 版本。不同版本的 Git 在行为上可能有细微差异比如对换行符的处理、对某些配置项的默认值等。统一用一份 Git能避免命令行里好好的SourceTree 里就报错这类诡异问题。3. SSH 密钥配置PuTTY 与 OpenSSH 的格式之争3.1 为什么 SSH 密钥格式会成为一个问题SSH 密钥本质上是一对数学上关联的字符串公钥放到代码托管平台私钥留在本地推送时用私钥证明身份。密钥的存储格式有多种OpenSSH 格式是事实标准PuTTY 格式是 Windows 平台上 PuTTY 工具链自己的格式。SourceTree 在 Windows 上默认走 PuTTY 这条线所以它期望的私钥是.ppk文件。问题就出在这里如果你先用命令行ssh-keygen生成了 OpenSSH 格式的密钥SourceTree 默认是读不了的反过来如果你用 PuTTYgen 生成了.ppk命令行 Git 也用不了。解决思路有两条要么统一用 OpenSSH 格式让 SourceTree 改用 OpenSSH 客户端要么统一用 PuTTY 格式把 OpenSSH 密钥转换成.ppk。3.2 方案一让 SourceTree 使用 OpenSSH 密钥这是我现在最推荐的做法因为 OpenSSH 格式通用性最强命令行和图形界面都能用。操作路径是打开工具 - 选项 - 一般找到 SSH 客户端配置把 SSH 客户端从 PuTTY 切换成 OpenSSH。切换后SourceTree 会去读默认的~/.ssh目录下的密钥也就是id_rsa和id_rsa.pub这一对。如果你还没有密钥用命令行生成即可ssh-keygen -t ed25519 -C 你的邮箱example.com这里用ed25519而不是传统的rsa是因为 ed25519 在安全性和性能上都更优生成的密钥也更短。生成过程中会问你要不要设置密码短语建议设置一个这样即使私钥文件泄露没有密码短语也无法使用。生成完成后id_ed25519.pub就是公钥把它的内容复制到代码托管平台的 SSH 密钥设置里。3.3 方案二用 PuTTYgen 生成或转换 ppk 密钥如果你坚持用 PuTTY 这条线或者团队环境要求如此那就用 PuTTYgen。打开 PuTTYgen可以直接点Generate生成新密钥也可以点Load加载一个已有的 OpenSSH 私钥然后点Save private key另存为.ppk格式。转换过程是无损的同一对密钥只是换了存储格式。生成或转换完成后在 SourceTree 的工具 - 选项 - 一般里SSH 客户端保持 PuTTY然后在 SSH 密钥那一栏指向你保存的.ppk文件。PuTTYgen 界面上方会显示公钥内容记得复制到托管平台。3.4 两种方案的对比与选择建议对比维度OpenSSH 方案PuTTY 方案格式通用性命令行、图形界面、多数平台通用主要在 Windows 的 PuTTY 工具链内使用密钥生成工具ssh-keygen系统自带PuTTYgen需额外安装与 SourceTree 集成需手动切换 SSH 客户端设置默认支持跨平台迁移直接复制 .ssh 目录即可需携带 .ppk 文件并配置推荐场景个人开发、多工具混用团队统一 PuTTY 环境我的建议很明确除非有特殊约束一律选 OpenSSH 方案。它的通用性带来的便利远超那一次切换设置的成本。PuTTY 方案更适合那些已经在用 PuTTY 管理大量服务器连接、不想再引入一套密钥体系的场景。4. 从克隆到第一次提交把流程真正跑通4.1 克隆远程仓库的两种入口SourceTree 主界面有几个明显的入口克隆、创建、添加。克隆远程仓库时把仓库的 SSH 地址粘贴进去选择本地存放路径点克隆即可。如果 SSH 配置正确几秒钟就能完成如果配置有问题这里会直接报权限错误正好可以验证前面的密钥配置是否生效。除了 SSH 地址也可以用 HTTPS 地址克隆。HTTPS 方式不需要配置 SSH 密钥但每次推送都要输入用户名和密码或者使用访问令牌。对于偶尔用一次的场景HTTPS 更省事对于日常开发SSH 更省心。注意现在很多代码托管平台已经不支持用账户密码直接推送必须使用个人访问令牌。如果你用 HTTPS 方式记得在平台设置里生成一个令牌用它代替密码。4.2 界面里几个核心区域的功能克隆完成后SourceTree 的主界面大致分几个区域。左侧是分支和标签列表能看到本地分支、远程分支、标签。中间上方是提交历史图每个提交是一个节点分支的合并关系用连线表示。中间下方是选中提交的详细信息和文件变更列表。右侧是工作区的文件状态分为已暂存和未暂存两块。理解暂存这个概念是用好 Git 的关键。工作区的改动先进入未暂存区你选择哪些改动要提交把它们移到已暂存区然后写提交信息点提交。这个两步走的设计让你可以精确控制每次提交的内容而不是把所有改动一股脑提交上去。4.3 完成一次规范的提交流程假设你改了两个文件但只想提交其中一个。在右侧未暂存区勾选你要提交的那个文件它就会移到已暂存区。然后在下方的提交信息框里写清楚这次改了什么点提交按钮。提交完成后历史图里会多出一个节点。提交信息怎么写是有讲究的。一句话概括这次改动的目的不要写修改更新这种没有信息量的词。好的提交信息能让几个月后的你或者同事快速理解这次改动的原因。如果改动比较复杂可以在第一行摘要下面空一行再写详细说明。4.4 推送到远程与拉取更新本地提交完成后点工具栏的推送按钮选择要推送的分支确认后就会把本地提交传到远程仓库。如果远程有你本地没有的提交推送会被拒绝这时需要先拉取。拉取就是把远程的新提交同步到本地然后再推送。拉取时如果本地和远程改了同一个文件的同一部分就会产生冲突。SourceTree 会把冲突文件标出来你需要手动编辑文件解决冲突然后在 SourceTree 里标记为已解决再提交。冲突不可怕它只是 Git 在告诉你这两处改动我无法自动合并需要你来决定保留哪个。5. 那些没人明说但迟早会踩的坑5.1 换行符问题Windows 与 Unix 的隐形差异Windows 用回车加换行CRLF表示换行Unix 系统只用换行LF。如果团队里有人用 Windows 有人用 Mac 或 Linux换行符不一致会导致整个文件显示为全部改动实际上内容没变只是换行符不同。解决办法是配置 Git 的换行符处理策略。在命令行里执行git config --global core.autocrlf trueWindows 上设为true表示提交时自动把 CRLF 转成 LF检出时再转回来。Mac 和 Linux 上设为input表示提交时转成 LF检出时不转。这样仓库里统一存 LF各平台检出时按自己的习惯处理。5.2 大文件与二进制文件的处理Git 本身对二进制文件的差异比较能力很弱一张图片改了一个像素Git 也会认为整个文件变了导致仓库体积迅速膨胀。如果项目里有大量图片、视频、设计稿建议引入 Git LFSLarge File Storage。它把大文件存在单独的地方仓库里只保留一个指针克隆和拉取时按需下载。SourceTree 对 Git LFS 有基本支持但配置还是要在命令行里做。安装 Git LFS 后用git lfs track *.psd这样的命令指定要跟踪的文件类型它会生成一个.gitattributes文件把这个文件提交上去团队其他人拉取后就会自动启用 LFS。5.3 提交历史乱了怎么补救有时候提交完了才发现漏了文件或者提交信息写错了。如果还没推送可以用修改最后一次提交的功能在 SourceTree 里勾选漏掉的文件然后选择提交 - 修改最后一次提交这样新的改动会合并到上一个提交里提交信息也可以一并修改。命令行里对应的是git commit --amend。如果已经推送了修改历史就要谨慎因为会影响到其他人。这种情况下更安全的做法是再做一个新提交来修正而不是改写已经公开的历史。记住一个原则没推送的历史可以随便改推送了的历史尽量别动。5.4 代码回退到某次提交的正确姿势想回到某个历史提交的状态有几种不同的做法效果完全不同。一种是重置reset把当前分支指向某个提交后面的提交就消失了另一种是还原revert创建一个新提交来抵消某次提交的改动历史保留完整。SourceTree 在提交节点上右键就能看到这些选项。如果只是想看看某个历史版本的文件用检出checkout那个提交进入分离头指针状态看完再切回原来的分支即可。如果想把某个文件恢复到历史版本在文件上右键选择重置到提交更精准。这些操作的区别值得花时间搞清楚用错了可能丢代码。6. 让 SourceTree 用起来更顺手的几个配置6.1 自定义忽略文件规则项目里总有些文件不该进版本库比如编译产物、日志、本地配置文件。在项目根目录建一个.gitignore文件把要忽略的模式写进去比如*.log、build/、.env。SourceTree 会自动读取这个文件被忽略的文件不会出现在未暂存区界面清爽很多。.gitignore的语法支持通配符和目录匹配写的时候注意区分/build/只忽略根目录下的 build和build/忽略任意层级的 build。如果某个文件已经被跟踪了后来才加进忽略列表需要先用git rm --cached把它从跟踪中移除忽略才会生效。6.2 配置默认的合并与比较工具SourceTree 内置的差异查看器够用但处理复杂冲突时专业的合并工具更高效。在工具 - 选项 - 差异里可以配置外部比较和合并工具。常见的选择有 Beyond Compare、KDiff3、VS Code 等。配置好之后遇到冲突可以一键调起外部工具三栏对比左右各是两边的改动中间是合并结果处理起来直观得多。6.3 用好书签和分组管理多个仓库如果你同时参与多个项目SourceTree 的书签功能能帮你把仓库组织起来。可以按项目、按客户、按技术栈建不同的文件夹把仓库拖进去。每个书签还能设置自定义的图标和备注。仓库多了之后这个组织方式比在文件管理器里翻目录高效得多。6.4 定期清理与性能维护SourceTree 用久了会积累一些缓存偶尔会出现界面卡顿或者状态显示不同步。遇到这种情况先试试仓库 - 刷新或者重启 SourceTree。如果问题依旧可以在工具 - 选项里找到清理缓存的选项。另外仓库本身也可以定期做垃圾回收命令行里执行git gc能压缩历史、清理无用对象对大型仓库效果明显。7. 命令行与图形界面不是二选一7.1 什么时候该用命令行SourceTree 能覆盖日常八成的操作但有些场景命令行更直接。比如批量修改提交历史、复杂的 rebase 操作、脚本化的自动化流程命令行更灵活。另外当 SourceTree 报了一个看不懂的错误时切到命令行执行同样的操作往往能看到更详细的错误信息便于定位问题。我的习惯是日常提交、拉取、推送用 SourceTree因为它快且直观遇到复杂的历史整理、批量操作、疑难排查切到命令行。两者不是对立的SourceTree 底层调用的就是 Git 命令理解命令行的原理能让你更好地理解图形界面里每个按钮背后发生了什么。7.2 在 SourceTree 里打开终端SourceTree 工具栏上有一个终端按钮点一下就能在当前仓库目录打开命令行窗口。这个设计很贴心省去了手动切换到仓库目录的步骤。在终端里执行完命令回到 SourceTree 点一下刷新界面状态就同步了。这个来回切换的流程是我处理复杂操作时的常用模式。7.3 理解 SourceTree 显示的状态与命令行的对应关系SourceTree 界面上显示的每个状态背后都对应着具体的 Git 命令。比如未暂存对应工作区和暂存区的差异已暂存对应暂存区和最后一次提交的差异。理解这层对应关系能帮你在界面显示异常时快速判断是哪里出了问题。比如某个文件明明改了SourceTree 却不显示可能是被.gitignore忽略了也可能是文件权限变了但内容没变Git 不认为它有改动。8. 团队协作中的 SourceTree 使用约定8.1 分支命名与提交信息的规范团队用 SourceTree如果没有约定分支名和提交信息会很快变得混乱。建议约定一套分支命名规则比如功能分支用feature/功能名修复分支用fix/问题描述发布分支用release/版本号。提交信息则约定用动词开头简明扼要说清楚做了什么。这些约定不依赖工具但 SourceTree 的分支列表和提交历史图会让遵守约定的价值更明显——一眼就能看出哪个分支在做什么。8.2 拉取策略合并还是变基团队协作中拉取远程更新时有两种策略合并merge和变基rebase。合并会创建一个合并提交历史图上有分叉和汇合的连线变基会把你的本地提交搬到远程最新提交之后历史是一条直线。SourceTree 在拉取时可以选这两种方式。变基让历史更整洁但会改写提交的哈希值如果这些提交已经推送并被别人基于它们工作就会造成混乱。所以通行的做法是只对尚未推送的本地提交做变基已经推送的提交用合并。SourceTree 的拉取对话框里可以设置默认策略团队最好统一。8.3 处理多人同时修改同一文件多人改同一个文件是协作中的常态关键是要频繁拉取、小步提交。每次开始工作前先拉取一次改完一小块就提交推送不要攒一大堆改动最后一起提交。改动越小冲突的范围越小解决起来越容易。SourceTree 的冲突解决界面会把冲突文件列出来双击进入合并工具逐块选择保留哪边的改动处理完标记为已解决再提交。如果冲突文件很多先别慌一个一个来。解决冲突的本质是决定最终代码长什么样Git 只是把选择权交给了你。实在拿不准的找改同一块代码的同事沟通一下比对着冲突标记猜要高效得多。8.4 用标签标记重要版本每次发布一个版本在对应的提交上打一个标签比如v1.0.0。标签是提交的别名比记哈希值方便得多。SourceTree 在提交节点上右键就能创建标签。标签分轻量标签和附注标签附注标签可以附带说明信息发布版本建议用附注标签。有了标签以后想回看某个版本的代码直接找标签就行不用在几百个提交里翻。9. 遇到问题时的排查思路9.1 推送被拒绝的常见原因推送被拒绝最常见的原因是远程有你本地没有的提交。解决办法是先拉取再推送。如果拉取时提示冲突按前面说的流程解决冲突。另一个原因是权限问题SSH 密钥没配好或者没有该仓库的写权限。这种情况下SourceTree 的报错信息通常会提示权限被拒绝或认证失败回到 SSH 配置环节检查。还有一种情况是分支保护规则某些平台对主分支设置了保护不允许直接推送必须通过合并请求。这不是配置错误而是流程要求按平台的流程走即可。9.2 界面显示与实际不符怎么办偶尔会遇到 SourceTree 显示的状态和实际不符比如命令行里明明提交了SourceTree 里还显示未提交。这通常是缓存或刷新问题点一下刷新按钮或者关掉仓库重新打开。如果还不行检查一下 SourceTree 指向的 Git 路径和你在命令行里用的是不是同一个。路径不一致会导致两边看到的状态不同。9.3 克隆大仓库时的超时处理仓库特别大时克隆可能超时。可以先用浅克隆只拉取最近的历史命令行里用git clone --depth 1需要完整历史时再逐步拉取。SourceTree 的克隆界面没有浅克隆选项所以这种情况建议先用命令行克隆再用 SourceTree 添加这个本地仓库。这也是图形界面和命令行配合的一个典型场景。9.4 密钥配置正确但仍然认证失败密钥配置看起来都对但就是认证失败这种情况我遇到过几次。排查顺序是先确认公钥确实添加到了托管平台有时候复制时漏了结尾的字符再确认私钥文件权限Unix 系统下私钥权限必须是 600太开放会被拒绝然后确认 SourceTree 用的 SSH 客户端和密钥路径匹配PuTTY 模式下指向.ppkOpenSSH 模式下指向id_ed25519这类文件。最后如果平台支持用ssh -T命令测试一下连接能直接看到认证是否通过。我在实际配置中体会最深的一点是SourceTree 的很多疑难杂症根源都不在 SourceTree 本身而在 Git 配置和 SSH 密钥这两个底层环节。把这两块理顺了SourceTree 用起来会非常省心。另外遇到报错别急着搜答案先仔细读一遍报错信息它往往已经告诉了你问题出在哪一层——是网络、是认证、还是仓库状态。养成读报错的习惯比记住一堆解决方案更有用。
返回列表