Skip to content

Latest commit

 

History

History
97 lines (73 loc) · 2.45 KB

UPDATE_LOGIC_EXPLANATION.md

File metadata and controls

97 lines (73 loc) · 2.45 KB

CodeRocket Update 命令逻辑说明

问题背景

用户执行 coderocket update 时遇到错误:

❌ 错误:安装目录不是Git仓库

问题分析

两个不同的目录概念

  1. 当前工作目录:用户执行命令的地方

    • 可能是任何项目目录
    • 不需要是Git仓库(对于update命令而言)
    • 用户可以在任何地方执行 coderocket update
  2. 安装目录:CodeRocket 工具的安装位置

    • 通常是 ~/.coderocket
    • 必须是Git仓库,这样才能通过 git pull 更新工具
    • 包含工具的所有文件和脚本

Update 命令的工作原理

coderocket update

这个命令的执行流程:

  1. 检查安装目录 $INSTALL_DIR 是否存在
  2. 检查安装目录是否是Git仓库 ← 这里是关键
  3. 进入安装目录
  4. 执行 git pull origin main 更新工具

自动修复逻辑

修复前的问题

# 检查是否为Git仓库
if [ ! -d "$INSTALL_DIR/.git" ]; then
    echo "❌ 错误:安装目录不是Git仓库"
    echo "请重新安装 CodeRocket"
    exit 1  # 直接失败
fi

修复后的逻辑

# 检查是否为Git仓库,如果不是则自动修复
if [ ! -d "$INSTALL_DIR/.git" ]; then
    echo "⚠️  检测到安装目录不是Git仓库"
    echo "🔧 正在自动修复..."
    
    # 进入安装目录(不是当前目录!)
    cd "$INSTALL_DIR" || exit 1
    
    # 在安装目录中初始化Git仓库
    git init
    git remote add origin https://github.com/im47cn/coderocket-cli.git
    git fetch origin main
    git reset --hard origin/main
    
    echo "✅ 自动修复完成"
fi

为什么这样做是安全的

  1. 不影响用户的当前目录

    • 所有操作都在 $INSTALL_DIR 中进行
    • 用户的工作目录不受影响
  2. 只修复工具本身

    • 只修复 CodeRocket 工具的安装
    • 不会在用户项目中创建Git仓库
  3. 符合预期行为

    • 安装目录本来就应该是Git仓库
    • 这是工具正常工作的前提条件

测试验证

测试脚本 test-update-fix.sh 验证了:

  • ✅ 自动修复功能正常工作
  • ✅ 远程仓库配置正确
  • ✅ 版本信息正确
  • ✅ 不影响其他目录

结论

这个自动修复逻辑是安全和必要的,因为:

  • 它只修复工具本身的安装问题
  • 不会影响用户的项目目录
  • 提供了更好的用户体验
  • 避免了用户需要手动执行复杂的Git命令