<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>工具 on Last Stand</title><link>https://amatsuzero.github.io/LastStand/tags/%E5%B7%A5%E5%85%B7/</link><description>Recent content in 工具 on Last Stand</description><generator>Hugo</generator><language>zh-cn</language><atom:link href="https://amatsuzero.github.io/LastStand/tags/%E5%B7%A5%E5%85%B7/index.xml" rel="self" type="application/rss+xml"/><item><title>工具 面试题</title><link>https://amatsuzero.github.io/LastStand/posts/frontend/interview-questions/tag-20-5ca6730d/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://amatsuzero.github.io/LastStand/posts/frontend/interview-questions/tag-20-5ca6730d/</guid><description>&lt;p&gt;共 40 道 工具 面试题。答案默认折叠，便于先自行作答。&lt;/p&gt;
&lt;h2 id="question-32b2812f-241b-4d0a-9da6-3ff8556b2df1"&gt;1. 你了解 Git 的 Worktree 吗？&lt;/h2&gt;
&lt;blockquote&gt;
&lt;p&gt;难度：3 · 类型：QA&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="题目要点"&gt;题目要点&lt;/h3&gt;
&lt;p&gt;Git Worktree 允许多个工作目录共享同一个仓库对象库，从而同时检出多个分支，避免频繁 checkout 带来的上下文切换问题。其核心依赖 Git 的对象数据库与工作区分离设计，相比 clone 具有更低的磁盘与网络成本，适用于并行开发、hotfix、版本对比和 CI 场景，本质是同一仓库的多工作视图机制。&lt;/p&gt;
&lt;details&gt;
&lt;summary&gt;参考答案&lt;/summary&gt;
&lt;p&gt;Git Worktree 是 Git 提供的一种 &lt;strong&gt;在同一个仓库中同时检出多个工作目录（working directory）&lt;/strong&gt; 的机制，本质目的是解决“一个仓库只能对应一个当前分支”的限制。&lt;/p&gt;
&lt;p&gt;在传统 Git 使用方式下，一个仓库目录只能 checkout 一个分支。如果正在开发 feature 分支，此时需要紧急修复线上 bug，就必须经历：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;stash 当前修改&lt;/li&gt;
&lt;li&gt;切换分支&lt;/li&gt;
&lt;li&gt;修复问题&lt;/li&gt;
&lt;li&gt;再切回原分支恢复现场&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;这个过程不仅低效，而且容易产生冲突或遗漏。Worktree 的出现，就是为了避免这种上下文切换成本。&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="一worktree-的核心原理"&gt;一、Worktree 的核心原理&lt;/h3&gt;
&lt;p&gt;Git 仓库实际上由两部分组成：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;.git&lt;/code&gt;：对象数据库（commit、tree、blob、refs）&lt;/li&gt;
&lt;li&gt;working directory：当前检出的文件&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Worktree 允许 &lt;strong&gt;多个 working directory 共享同一个 &lt;code&gt;.git&lt;/code&gt; 对象库&lt;/strong&gt;。&lt;/p&gt;
&lt;p&gt;也就是说：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;commit history 只有一份&lt;/li&gt;
&lt;li&gt;objects 只有一份&lt;/li&gt;
&lt;li&gt;但可以有多个独立的代码目录，每个目录对应不同分支&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Git 内部会在 &lt;code&gt;.git/worktrees/&lt;/code&gt; 下维护额外工作区的元信息，每个 worktree 都拥有自己的 HEAD、index 和 checkout 状态。&lt;/p&gt;</description></item></channel></rss>