AI 时代的 Git 进阶术:如何优雅地让多个 Agent 并行开发
前情提要缘起AI 并发能力与传统 Git 工作流的碰撞接触到git worktree的直接原因是在使用 Claude Code 辅助编程时遇到的文件系统层面的物理瓶颈。当试图让 AI Agent 在同一个代码项目中并行开发两个不同的需求时由于传统的 Git 仓库在同一时刻只能检出一个工作分支导致多个 AI 任务无法在同一个工作目录下同时运行。为了给不同的 Agent 提供独立的物理执行环境我找到了git worktree。什么是 Git Worktree平时我们用git checkout切换分支时文件会在同一个文件夹里变来变去。如果你正在写一个大功能写到一半突然需要去修复一个紧急 Bug通常只能用git stash把代码藏起来或者先提交一个乱糟糟的 commit。git worktree是 Git 提供的一个强大的高级功能它允许你在同一个本地 Git 仓库中同时检出checkout多个不同的分支到不同的物理文件目录中。常用命令速查1. 添加新的工作区语法git worktree add 路径 分支名示例假设你当前在my-project目录下想在同级目录创建一个名为my-project-hotfix的文件夹并检出master分支git worktree add ../my-project-hotfix master如果你想基于当前分支创建一个新分支并检出到新工作区可以加上_-b_参数git worktree add -b hotfix/bug-123 ../my-project-hotfix master2. 查看当前所有的工作区可以列出当前仓库关联的所有物理路径及其对应的分支git worktree list3. 移除工作区当你完成了紧急修复不再需要那个目录时可以使用命令安全移除git worktree remove ../my-project-hotfix(注意移除前请确保该工作区没有未提交的更改否则 Git 会阻止你删除。可以加_-f_强制移除。)4. 清理失效的工作区如果你习惯直接在文件系统中“暴力”删除了工作区文件夹右键 - 删除Git 的内部记录里可能还会保留它的追踪信息。运行以下命令可以清理掉这些失效的记录git worktree prune怎么玩How首先创建一个Git仓库mkdirml-pipelinecdml-pipelinegitinit在这个仓库里添加 README.md 和一个 Python 文件echo# ML PipelineREADME.mdechodef load_data():train.pyecho print(Loading training data...)train.pycommit 并且创建一个分支gitadd.gitcommit-mInitial commitgitbranch feature-preprocessing现在你得到了一个有 2 个分支的 Git 仓库 main 和 feature-preprocessing 。为现有分支创建工作树只需一个命令gitworktreeadd../ml-pipeline-preprocessing feature-preprocessing这一步在当前位置的上一层级创建了一个名为 ml-pipeline-preprocessing 的文件夹接下来为另一个全新的工作同时创建一个分支和一个工作树gitworktreeadd-bfeature-visualization../ml-pipeline-viz-b 的意思是创建 feature-visualization 分支并在新的工作树中检出该分支worktree的结构gitworktree list第一行显示你的主工作树 —— 包含.git文件夹的原始目录。第二行显示你的链接工作树。两行都显示当前的提交哈希和已检出的分支。每个worktree目录都有完整的Git仓库功能。你可以进入目录编辑文件执行 git status 并且 commit 。但是链接的worktrees没有完整的 .git 文件夹而是使用一个 .git 文件用来指向主仓库。在主.git目录内部有一个worktrees文件夹用于存储每个链接工作树的元数据。在 worktree 中工作接下来可以进入 feature-preprocessing 并完成提交cd../ml-pipeline-preprocessingcattrain.pyEOF def preprocess_features(df): Normalize numeric features. return (df - df.mean()) / df.std() EOFgitaddtrain.pygitcommit-mAdd feature preprocessing function回到 main worktree 并且查看提交历史cd../ml-pipelinegitlog--oneline--all在 Worktree 目录中提交所有修改# 进入你的 worktree 物理目录cd../feature-worktree# 确认你在 feature-A 分支上gitbranch# 暂存并提交你的所有修改gitadd.gitcommit-mfeat: 完成在 worktree 中的开发过河拆桥清理 Worktree代码合并完并推送到远端后那个额外的物理文件夹和分支就没有利用价值了。为了保持环境整洁建议安全地删掉它们# 1. 安全移除物理工作区注意路径要写对gitworktree remove../feature-worktree# 2. 删除已经合并完毕的本地分支gitbranch-dfeature-AGit Worktree 使用案例并行开发Parallel feature development你正在实现自定义指标和一个新的数据加载器 —— 这是两个独立的功能。为每个功能设置一个工作树gitworktreeadd-bfeature-custom-metrics../ml-pipeline-metricsgitworktreeadd-bfeature-streaming-loader../ml-pipeline-loader现在的文件夹目录结构如下~/projects/ ml-pipeline/[main]- your usual work ml-pipeline-metrics/[feature-custom-metrics]ml-pipeline-loader/[feature-streaming-loader]现在可以分别在各自的终端运行并行这两个功能# Terminal 1cd~/projects/ml-pipeline-metrics python experiments/evaluate_custom_metrics.py# Terminal 2cd~/projects/ml-pipeline-loader pytest tests/test_data_loader.py-v两个进程会同时运行且不会产生冲突。当一个功能完成后将其合并并移除工作树cd~/projects/ml-pipelinegitmerge feature-custom-metricsgitworktree remove../ml-pipeline-metricsReferencehttps://git-scm.com/docs/git-worktreeGit Worktree Tutorial: Work on Multiple Branches Without Switching
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2432620.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!