Claude Code终端使用指南(四)—会话、上下文、Git与并行开发
Claude Code 会持续保存终端会话。一个任务可以跨多次启动继续,也可以从同一个历史节点分支尝试不同方案。文件检查点适合短期撤销,Git 负责长期历史;Git worktree 则让多个 Claude Code 会话拥有相互隔离的工作目录。 本文继续使用虚构的 task-board 项目,假设团队同时进行三项工作: 为 POST /tasks 增加幂等性; 修复任务列表的分页缺陷; 独立审查幂等性实现。 文章将用命名会话、上下文管理、检查点、Git 和 worktree 组织这些工作,并说明子代理、Agent view 与实验性 Agent teams 的适用边界。 0. 会话与并行命令速查0.1 命名与恢复1234claude --name task-idempotencyclaude --continueclaude --resumeclaude --resume task-idempotency 会话内: 1234/rename task-idempotency/resume/branch alternative-schema/export...
Claude Code终端使用指南(三)—项目记忆、配置、权限与沙箱
Claude Code 的项目定制包含两类本质不同的机制: CLAUDE.md、Rules 和 Skills 向模型提供上下文,帮助它作出正确判断; 设置、权限规则、Hooks 和沙箱限制工具实际能做什么。 前者是指导,后者才是执行边界。把“不要读取 .env”写进自然语言指令并不能形成安全保证;需要使用 Read deny 规则、PreToolUse Hook 或操作系统级沙箱执行限制。 本文继续使用虚构的 TypeScript 项目 task-board,建立一套可提交给团队的 Claude Code 项目配置。内容包括项目记忆、自动记忆、设置作用域、权限模式、规则语法、敏感文件保护、沙箱和提示注入防护。 0. 配置决策速查 需求 应使用的机制 每个会话都应知道构建命令和架构约定 CLAUDE.md 只处理特定路径时才需要的规则 .claude/rules/*.md 的...
Claude Code终端使用指南(二)—核心工作流与提示策略
Claude Code 的效果并不只取决于模型能力。启动位置、任务边界、提供的上下文、验证信号和会话中的纠偏方式,都会影响最终结果。官方最佳实践将上下文窗口视为最重要的有限资源,并推荐为 Claude 提供可以自行执行的验证手段。 本文延续第一篇中的虚构 TypeScript 项目 task-board,以“为创建任务接口增加幂等性”为端到端场景,介绍如何让 Claude Code 从理解代码开始,经过规划、实现、测试和审查,最终产出可验证的修改。 本文讨论的是终端 CLI。文中的项目名、接口和文件路径均为虚构示例,不代表真实可访问的仓库。 0. 推荐工作流速查0.1 复杂任务12cd /path/to/task-boardclaude --permission-mode plan --name task-idempotency 在规划模式中: 123只读分析 POST /tasks 的调用链、数据库写入位置、错误处理和现有测试。找出项目中是否已有幂等键、唯一约束或请求去重模式。暂时不要修改文件。 继续要求规划: 1234目标:支持 Idempotency-Key...
Claude Code终端使用指南(一)—安装、认证与首次会话
Claude Code 是 Anthropic 提供的智能编程代理。它可以在终端中读取项目文件、搜索代码、编辑文件、运行命令,并围绕测试或构建结果继续迭代。它与 claude.ai 的普通聊天界面、Claude Desktop 以及 IDE 插件并不是同一个使用入口。本系列只讨论在本地终端中通过 claude 命令启动的 Claude Code CLI。 本文是系列的第一篇,介绍系统要求、安装方式、认证、版本更新、首次启动和基础交互。后续文章依次讨论: 核心工作流与提示策略; 项目记忆、配置、权限与沙箱; 会话、上下文、Git 与并行开发; Skills、子代理、Hooks、MCP 与插件; 非交互自动化、成本控制与故障排查。 系列以“能够独立、可靠地在终端中使用 Claude Code 完成真实项目工作”为范围,覆盖安装认证、交互工作流、项目配置、安全边界、状态管理、并行开发、扩展机制、脚本化和排障。Claude Desktop、IDE 插件和 Claude Code on the web...
使用Git与GitHub进行远程协作
Git 是分布式版本控制系统,GitHub 则在 Git 仓库之上提供代码托管、Issue、Pull Request、代码审查和自动化检查等协作能力。在不具备原仓库写权限的情况下,GitHub 上常见的贡献方式是:Fork 原仓库,在个人 Fork 中维护功能分支,再通过 Pull Request 向原仓库提交变更。 本文以一个完整的开源贡献场景为主线,介绍 Fork、Clone、远程仓库配置、上游同步、分支开发、提交整理、Push、Pull Request、代码审查和分支清理。主流程参考 GitHub 官方 Fork 与 Pull Request 文档;rebase 相关内容以 Git 官方《Pro Git》为依据。具体项目的 CONTRIBUTING.md 和维护者要求具有更高优先级。 0. Git 与 GitHub 远程协作命令速查示例仓库: 123原仓库:alice/task-board个人 Fork:xiaoming/task-board任务分支:fix/issue-128-empty-title 将示例中的账号、仓库和分支替换为实际名称。 0.1 Fork...
Linux文件系统目录结构详解
刚接触 Linux 时,打开根目录往往会看到 bin、etc、usr、var 等许多名称简短的目录。它们看起来有些抽象,但并不是随意摆放的:Linux 会按照文件的用途组织系统,而不是像 Windows 那样主要按照磁盘分区组织文件。 理解这些目录之后,我们就能更快地找到配置文件、程序、日志和用户数据,也能避免误删系统中的重要内容。 1. 从根目录 / 开始Linux 文件系统只有一棵目录树,最顶层是根目录 /。其他磁盘分区、U 盘和网络存储也会被挂载到这棵树中的某个目录下。 需要注意的是: / 表示整个文件系统的根目录。 /root 是超级用户 root 的家目录,两者不是同一个概念。 /home/alice/file.txt 是从根目录开始的绝对路径。 ./file.txt 是相对于当前工作目录的相对路径。 一套常见的 Linux 根目录结构如下: 12345678910111213141516171819/├── bin 常用命令├── boot 启动文件├── dev 设备文件├── etc 系统配置├── home ...
CPP学习笔记—结构化绑定
1. 什么是结构化绑定?一句话概括: 结构化绑定是一种允许你用一个声明语句,将一个对象(如 struct、class、std::tuple、std::pair 或 C 风格数组)的多个成员或元素,一次性解构并绑定到多个独立变量上的语法。 它的核心目的是提升代码的可读性和简洁性,消除访问复合对象成员时的冗余代码。 核心语法: 123auto [ a, b, c, ... ] = some_object;// or with qualifiers:const auto& [ a, b, c, ... ] = some_object; auto: 关键字,表示类型推导,必须使用 auto(或 auto&, auto&&, const auto& 等)。 [...]: 方括号内是用逗号分隔的新变量名列表。 = some_object: 等号右边是需要被解构的对象。 2. 为什么需要结构化绑定?(The “Why”)在 C++17 之前,当我们处理返回多个值的函数(通常通过 std::pair 或 std::tuple)或遍历一个...
CPP学习笔记—策略模式
1. 什么是策略模式?策略模式是一种行为设计模式,它定义了一系列算法,将每一个算法封装起来,并使它们可以相互替换。此模式让算法的变化独立于使用算法的客户。 简单来说,策略模式的核心思想是: 分离: 将算法的 定义(是什么) 与算法的 使用(何时用) 分离开来。 封装: 将不同的算法(即“策略”)封装在各自独立的类中。 委托: “上下文”(Context)对象不亲自执行算法,而是将任务委托给它所持有的策略对象。 GoF(《设计模式》)中的经典定义是:“Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.” 2. 为什么需要策略模式?(问题场景)假设我们正在编写一个数据处理程序,其中一个功能是对一组数据进行排序。一开始,我们可能只实现了一种排序算法,比如冒泡排序。 一个反例:使用 if-else 或...
CPP学习笔记—std::function的用法
std::function 是 C++11 中引入的一个极其有用的工具,位于 <functional> 头文件中。它是一个通用的、多态的函数包装器。它的实例可以存储、复制和调用任何可调用 (Callable) 目标——包括普通函数、Lambda 表达式、函数指针、成员函数指针、以及函数对象(functors)。 1. std::function 是什么?一句话定义std::function 是一个类型安全的包装器,它可以持有任何符合其函数签名的可调用对象。 可以把它想象成一个“万能的函数指针”,但它比函数指针强大得多,因为它可以指向任何可调用的东西,而不仅仅是全局函数。 解决的问题:类型不统一的“可调用物”在 C++ 中,有很多东西都可以被“调用”,比如: 普通函数指针: void (*p_func)(int); 函数对象 (Functor): 一个重载了 operator() 的类的对象。每个函数对象都有自己独特的类型。 Lambda 表达式: 编译器会为每个 Lambda 生成一个唯一的、匿名的闭包类型。 在 std::function...
CPP学习笔记—右值引用和移动语义
右值引用(Rvalue Reference)和移动语义(Move Semantics)是 C++11 中引入的最重要的特性之一,它极大地提升了 C++ 的性能,并使得一些新的编程范式(如资源所有权的唯一性)成为可能。 1. 背景知识:左值(Lvalue)与右值(Rvalue)在 C++ 中,每一个表达式都有两个属性:类型(Type) 和 值类别(Value Category)。值类别中最基本的就是左值和右值。 左值 (Lvalue - Locator Value)可以把它粗略地理解为 “有固定内存地址、可以被赋值” 的表达式。它就像一个有名字、有固定住址的“居民”。 特征: 可以取地址(使用 & 运算符)。 通常出现在赋值运算符 = 的左边。 在表达式结束后依然存在。 例子: 变量名:int x = 10; (x 是一个左值)。 数组元素:arr[0]。 解引用的指针:*p。 返回左值引用的函数调用:get_string_ref()。 右值 (Rvalue - Read Value)可以把它粗略地理解为 “临时的、即将被销毁”...











