用 Git Worktree 提升 Android 开发者的生产力
Git Worktree 是 Git 一个强大但鲜为人知的功能。它可以让你同时打开多个工作目录,而无需忍受其他常见方法的痛点。
为什么需要多个工作目录?
拥有多个工作目录有很多好处,以下是一些常见场景:
- 同时处理两个功能:这很常见,你有一个主要的功能/目标,同时利用额外的 20% 时间来处理重要的改进、迁移或重构。
- 代码审查、QA、修复 Bug:你正在开发某个功能,突然需要切换分支去测试和审查同事的代码,或者修复另一个功能上的重要 Bug。
- 并行运行多个 AI 助手:你想同时执行多项任务,但又不想让 AI 助手之间产生冲突或互相干扰。
其他方法怎么样?
我们当然可以用其他方法来处理上述场景,最常见的有两种:
- 切换分支:在典型的 Git 工作流中,我们为每个新功能或 Bug 修复创建新分支。如果需要在功能间跳转,我们必须先存储或暂存当前分支上所有未提交的更改,然后才能检出另一个分支。每个仓库一次只能检出一个分支,这使得多任务处理变得非常困难。
- 克隆多个相同仓库:为了同时检出两个分支,我们可以克隆两次相同的仓库。虽然可行,但这种方法开销更大,因为每个克隆体都需要维护自己的 Git 历史记录。两个仓库之间也无法共享本地的 Git 更改。当你需要超过两个克隆时,维护起来会更加麻烦。
Git Worktree 如何解决这个问题?
Git Worktree 允许你将同一仓库的多个分支检出到不同的目录中。每个工作树都有自己独立文件的工作目录,同时仍然共享相同的 Git 历史记录。
它们可以通过简单的 Git 命令轻松管理,方便地创建新工作树、跟踪它们以及删除它们。因为工作树是仓库的副本,你可以在 Android Studio 或任何其他 IDE 中像打开普通项目一样打开它们。要处理不同的功能,你只需在打开的多个 IDE 窗口之间切换即可,无需暂存。
为什么 Android 开发者应该关注?
- 更快的构建:Android 构建很慢,切换分支可能导致 Gradle 构建缓存失效,从而被迫进行更长时间的构建。每个工作树都有自己的构建目录,这意味着构建不会互相使缓存失效。
- 快速的上下文切换:Android Studio 支持将多个工作树作为独立项目单独打开。这让我们可以同时打开多个 Android Studio 窗口,几乎不费吹灰之力就能降低上下文切换的成本。
- 并行运行 AI 助手:Git Worktree 在 Claude Code 文档 中被推荐为同时运行多个 AI 助手的一种方式。
这些好处应该能提高生产力,并让你更容易管理多个功能。
如何使用 Git Worktree?
使用工作树很简单,只需要记住三个命令。
创建新工作树
- 从你的主工作目录开始。这通常是你的 Git 仓库,也就是你在 Android Studio 中打开的那个文件夹。
- 运行以下命令来创建一个新的工作树:
git worktree add ../myapp-featureA -b feature/A - 这将在你当前目录之外创建一个名为
myapp-featureA 的新项目文件夹。新的 Git 目录将检出一个名为 feature/A 的新分支。 - 现在,你可以在 Android Studio 的另一个窗口中打开这个新项目,并像往常一样在那里工作,按需提交更改。
合并工作树的更改
你可以在工作树内正常地将更改提交到已检出的功能分支。然后,要将更改合并回主分支,你有两个选择:
- 将新分支推送到远程并打开合并请求。
- 或者回到主目录,使用
git merge feature/A 将工作树分支合并回主分支。
跟踪工作树
要了解你当前有哪些工作树,可以运行 git worktree list,它会打印出工作树列表(包括主工作树)。这个命令可以帮助你获取工作树的名称,这是删除它所必需的。
清理工作树
当你完成工作树的工作后,可以使用 git worktree remove ../myapp-featureA 命令来删除它。有时你可能需要使用 --force 标志来完全删除目录。工作树的名称与你创建它时使用的名称相同。如果忘记了,可以使用 git worktree list 命令来查找。
技巧与最佳实践
创建工作树时,请记住以下几个有用的技巧和最佳实践:
- 将工作树存储在项目文件夹之外,以保持整洁。
- 使用有意义的分支名和目录名,以便轻松识别。
- 你不能在多个工作树中检出同一个分支。
- Android Studio 支持独立打开多个工作树。
- 完成后记得删除工作树。
结论
Git Worktree 是 Git 的一个强大功能,它让多任务处理变得更加容易。对于 Android 开发,相比切换分支,它通过避免重建延迟和上下文切换开销来减少摩擦。它也是在同一个代码库中运行多个 AI 助手而不会引起冲突的绝佳解决方案。
它是否适合你,取决于你的具体使用场景。不妨试一试,看看它是否能提升你的生产力!
参考资料:
- https://git-scm.com/docs/git-worktree
- https://levelup.gitconnected.com/how-to-use-git-worktree-89722e4fca96
- https://code.claude.com/docs/en/common-workflows#run-parallel-claude-code-sessions-with-git-worktrees
原文链接:https://medium.com/@domen.lanisnik/increase-productivity-with-git-worktrees-as-an-android-developer-c7e8b99eeab5