Skip to content

Latest commit

 

History

History
187 lines (129 loc) · 8.94 KB

README.zh-CN.md

File metadata and controls

187 lines (129 loc) · 8.94 KB

Git Worktree Manager

Visual Studio Marketplace Installs GitHub release GitHub Open Issues License GitHub Stars

English | 简体中文

无缝切换分支,保持代码井然有序,轻松跨多个目录运行——简化你的开发流程。

Why Git Worktree Manager?

  1. 在多个分支间切换可能非常繁琐,容易导致冲突或遗忘提交。Git Worktree Manager 帮助开发者在不同工作目录间快速切换,简化分支管理。

  2. 有时需要同时处理不同版本的代码,但切换分支或提交非常耗时。通过使用工作区,你可以在独立目录中并行开发,不会相互干扰。

Git Worktree工作原理

Git worktree 让你无需离开当前工作区,轻松处理跨分支和提交的多个任务——完美适用于管理复杂项目。

使用 git worktree,你可以创建额外的工作目录,并将它们与不同的分支或提交关联。这样做的好处是可以在不切换分支的情况下同时进行多个任务,方便开发人员处理不同的代码版本。

通过创建一个新的工作目录,我们可以在当前目录和新的工作目录之间切换,而每个目录都可以与不同的分支或提交关联。这使得你可以在每个目录中独立执行 Git 操作,如提交代码、拉取更新等,互不影响。

总结来说,git worktree 提供了一种灵活的方式来管理多个任务或版本,提升开发效率。

快速上手

  1. 在 VSCode 扩展市场中安装
  2. 按下 Ctrl + Shift + R 开始操作

使用要求

  • git 版本 >= 2.30

(回到顶部)

用法

  1. 创建 worktree

  1. 切换分支/标记

  1. 管理多个仓库

  1. 向工作区添加 worktree 目录

(回到顶部)

技巧

  1. 外部终端设置
    • 打开外部终端时,可以自定义打开的终端应用。在 windows 上可以通过 terminal.external.windowsExec 配置启用的终端,其他平台类似。
    {
      "terminal.external.osxExec": "iTerm.app",
      "terminal.external.windowsExec": "C:\\Program Files\\Git\\bin\\bash.exe",
    }
  2. 防止在执行 git pull 后,相同分支的worktree未暂存的代码自动进入暂存区
    • 仓库目录/.git/hooks/post-merge 脚本文件中添加脚本
    #!/bin/bash
    
    # 获取当前文件夹路径(Unix系统)
    CURRENT_FOLDER=$(pwd)
    # windows需要去掉下面的注释,启用 crypath 转换路径
    # CURRENT_FOLDER=$(cygpath -w "$(pwd)")
    
    # 获取当前分支名称
    CURRENT_BRANCH_NAME=$(git rev-parse --abbrev-ref HEAD)
    
    # 获取所有 worktree 的列表并逐行处理
    git worktree list --porcelain | grep "worktree" | while read -r LINE; do
        # 提取 worktree 路径
        WORKTREE=$(echo "$LINE" | awk '{print $2}')
    
        # windows需要去掉下面的注释,启用 crypath 转换路径
        # WORKTREE=$(cygpath -w "$WORKTREE")
    
        # 如果当前目录路径与 worktree 路径相同,则跳过
        if [ "$CURRENT_FOLDER" = "$WORKTREE" ]; then
            continue
        fi
    
        # 获取目标 worktree 的分支名称
        TARGET_BRANCH=$(git --work-tree="$WORKTREE" --git-dir="$WORKTREE/.git" rev-parse --abbrev-ref HEAD)
    
        # 如果目标 worktree 的分支与当前分支相同,则进行处理
        if [ "$TARGET_BRANCH" = "$CURRENT_BRANCH_NAME" ]; then
            echo "Processing worktree: $WORKTREE on branch: $TARGET_BRANCH"
            git --work-tree="$WORKTREE" --git-dir="$WORKTREE/.git" reset --merge HEAD
        fi
    done
    • 这段 post-merge 脚本在 Git 合并操作后,通过将匹配的分支重置为合并后的状态,确保多个 Git worktree 的一致性。

路线

  • 列出当前文件夹的所有worktree
  • 列出当前仓库的所有worktree
  • 通过 worktree 文件夹快速打开终端
  • 打开最近访问过的文件夹
  • 使用git switch --ignore-other-worktrees 切换任意分支
  • 切换消息提示等级
  • 访问 git 历史
  • 展示 git 分支状态
  • 拉取/推送分支
  • 在工作区内添加/删除指定 worktree 目录
  • git 仓库快照
  • 多语言支持
    • 中文

点击 打开议题 查看所有功能建议(和已知问题)

(回到顶部)

参与贡献

参与贡献使开源社区成为学习、启发和创造的绝佳场所。非常感谢你做出的任何贡献。

如果你有任何建议可以改进项目,欢迎你 fork 该项目并创建一个 pull request。你也可以直接打开一个带有 "enhancement" 标签的 issue。
别忘了给这个项目加个星标!再次感谢!

  1. Fork 该项目
  2. 创建特性分支 (git checkout -b feature/AmazingFeature)
  3. 提交你的更改 (git commit -m 'Add some AmazingFeature')
  4. 推送到分支 (git push origin feature/AmazingFeature)
  5. 打开一个 Pull Request

License

以 MIT 许可证发布。有关更多信息,请查看 LICENSE

联系方式

Jackiotyu - 2504448153@qq.com

项目链接: /~https://github.com/jackiotyu/git-worktree-manager