tool-skills/my-git-bash/SKILL.md

8.6 KiB
Raw Permalink Blame History

name description
install-my-git-bash 在 Windows Git Bash 上安装 xnng/my-git-bash 终端美化与工具集mintty 主题、git 提示符、tmux、tree、Powerline 字体、alias。当用户说装机、新机器初始化 Git Bash、安装/配置 my-git-bash、恢复终端配置、美化 Git Bash、装 tmux/tree/Powerline 字体时使用。严格按既定偏好执行:绝不整体覆盖 .bash_profile/.gitconfig 而是增量合并、unicode 箭头 ➜ 改 ASCII ->、备份后再覆盖系统文件、检测并跳过已装工具。

安装 my-git-bashGit Bash 美化与工具集)

https://github.com/xnng/my-git-bash 这套 Git Bash 配置装到本机mintty 主题、git 提示符、tmux、tree、Powerline 字体、alias。重点是按用户偏好安全地安装,绝不破坏用户已有的个人配置。

⚠️ 核心原则(必须遵守,不可省略)

这五条是用户明确要求的工作方式,违反任何一条都算事故:

  1. 永不整体覆盖用户的 dotfiles。 禁止 cp .bash_profile ~cp .gitconfig ~ 这类整文件覆盖。.bash_profile增量追加(带日期标记段落,可整段删除);.gitconfig 完全不碰(里面有用户真实提交身份和代理,覆盖会让 commit 变成别人、还可能注入无效代理)。
  2. unicode 符号改 ASCII。 仓库 git-prompt.sh 的提示符箭头 U+279C在 GBK 终端会乱码/报错,必须改成 ->。同理避免 → │ ╔ ▶ 等。
  3. 覆盖系统文件前先备份。 /etc/profile.d/git-prompt.sh 等系统文件被覆盖前,先 cp 一份 .bak
  4. 检测后跳过已装工具。 装前先 command -v 检测wget 系统通常自带 → 跳过 tools/wget.exe,不要覆盖。
  5. 增量改动加可识别标记。 追加内容用 # --- 以下增量来自 my-git-bash (YYYY-MM-DD) ---# --- end my-git-bash --- 包裹,方便日后识别/删除。

关联记忆:feedback-dotfiles-incremental-encodinguser-iflytek-embedded-dev

第 0 步:预检(先跑,结果决定后续)

whoami                                            # 确认身份
touch /usr/bin/.wt 2>/dev/null && echo "管理员OK" && rm -f /usr/bin/.wt || echo "非管理员:系统目录操作需重开管理员 Git Bash"
for t in tmux wget tree winpty code git; do printf "%-8s " $t; command -v $t || echo 未装; done
git --version

同时必须读用户现有配置,判断冲突:

  • cat ~/.bash_profile 2>/dev/null —— 看已有哪些 alias/函数(尤其 git 快捷键、tree、GBK 转码等),增量时跳过已有的。
  • cat ~/.gitconfig 2>/dev/null —— 确认用户身份,只读不改
  • ls ~/.minttyrc ~/.tmux.conf 2>/dev/null —— 不存在才能直接装。

第 1 步:克隆仓库

git clone https://github.com/xnng/my-git-bash   # 国内不畅可换 gitee: https://gitee.com/xnng/bash.git
cd my-git-bash

第 2 步:备份系统 git-prompt.sh

cp /etc/profile.d/git-prompt.sh /etc/profile.d/git-prompt.sh.bak

第 3 步:安装 Powerline 字体(管理员)

cp "fonts/DejaVu Sans Mono for Powerline.ttf" /c/Windows/Fonts/
MSYS_NO_PATHCONV=1 reg add "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts" \
  /v "DejaVu Sans Mono for Powerline (TrueType)" /t REG_SZ \
  /d "DejaVu Sans Mono for Powerline.ttf" /f
  • MSYS_NO_PATHCONV=1 必加,否则 /v /t /d /f 被 MSYS 当路径转换而失败。
  • reg 成功输出中文GBK在终端会显示乱码属正常,看退出码即可。
  • 回退(非管理员或失败):start c://Windows//Fonts && start fonts,手动拖拽安装。

第 4 步:主题(.minttyrc + 改箭头的 git-prompt.sh

先把 git-prompt.sh 第 15 行的 '➜ ' 改成 '-> '(用 Edit 工具最稳;用 sed 注意分隔符不能~/,因为内容里有 ~//

cp .minttyrc ~                                   # 不存在才直接 cp已存在则先备份再覆盖
cp git-prompt.sh /etc/profile.d/git-prompt.sh

第 5 步tmux 本体 + 配置

cp tmux/bin/* /usr/bin
cp tmux/share/* /usr/share -r
cp tmux/.tmux.conf ~                             # 仓库完整配置prefix=C-a、分屏 |-、vi 模式、状态栏),优于 README 的 echo

第 6 步tmux 持久化插件(可选,问用户)

插件能保存/恢复 session但会拖慢 tmux 启动;用户不要就跳过。

mkdir -p ~/.tmux/plugins/tpm
git clone --depth 1 https://github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm   # 可能因网络失败,失败不影响 tmux 本体
# 国内备选: git clone https://gitclone.com/github.com/tmux-plugins/tpm ~/.tmux/plugins/tpm

clone 成功后,取消 ~/.tmux.conf 中插件行的注释5 个 @plugin + 1 个 run。sed 用 : 作分隔符(避开内容里的 ~/

sed -i -E "s:^# (set -g @plugin|run '):\1:" ~/.tmux.conf
grep -nE "@plugin|tpm/tpm" ~/.tmux.conf          # 验证已无 # 前缀

装完告诉用户:进 tmux 后按 Ctrl+a 再按大写 I 让 tpm 拉取 resurrect/continuumprefix 是 C-a不是默认 C-b

第 7 步tree跳过 wget

cp tools/tree.exe /usr/bin                       # 只拷 treewget 系统已自带,不覆盖

第 8 步alias 增量合并(核心:分析后追加,不是覆盖)

先读用户 ~/.bash_profile,按下表分类,只追加「用户没有、不冲突、无 bug」的

类别 处理 仓库示例
用户已有 跳过 gs/gclean/sysoff/sysre、用户的 tree='tree --charset ASCII'(比仓库好,避免乱码)、用户的 GBK 转码 zw/git_diff_gbk
有冲突 跳过 .='cd ~'(破坏 . 语义)、tree1/tree2(与用户 ASCII tree 冲突)
有 bug 跳过 utf8/gbksed -i 's/GBK/UTF-8/' 单引号嵌套错误,且用户已有自己的方案)
有用且用户没有 追加 git 快捷键 ga/gc/gp/gl/gb/gch/gm、导航 .. / ... / ,e/cls、tmux tn/tabashalias/gitconfig(用 code 打开配置)、ep/c

追加用 heredoc'EOF' 带引号防展开),带防重复检查 + 日期标记

if grep -q "my-git-bash 仓库 ($(date +%F) 添加)" ~/.bash_profile 2>/dev/null; then
  echo "已追加过,跳过"
else
  cat >> ~/.bash_profile << 'MYGITBASH_EOF'

# --- 以下增量来自 my-git-bash 仓库 (YYYY-MM-DD 添加) ---
# git 快捷键
alias ga='git add .'
alias gc='git commit -m'
alias gp='git push'
alias gl='git pull'
alias gb='git branch'
alias gch='git checkout'
alias gm='git merge'
# 目录导航
alias ..='cd ..'
alias ...='cd ../..'
alias ,='cd -'
alias e='exit'
alias cls='clear'
# tmux
alias tn='tmux new -s m'
alias ta='tmux a'
# 用 VS Code 快速打开配置
alias bashalias='code ~/.bash_profile'
alias gitconfig='code ~/.gitconfig'
# 资源管理器/VSCode 打开当前目录
alias ep='start . && exit'
alias c='code . && exit'
# --- end my-git-bash ---
MYGITBASH_EOF
fi

上面的 YYYY-MM-DD 换成当天日期;清单按用户实际已有情况增删——分析是这步的灵魂,不要无脑全加

绝不做

  • cp .bash_profile ~(覆盖工作配置)
  • cp .gitconfig ~(覆盖提交身份 + 注入代理)
  • cp tools/wget.exe /usr/bin(覆盖系统 wget

验证

# 箭头已是 ASCIIcat -A 应显示 '-> ',无 M-b/M-f 的 UTF-8 字节)
grep -n "PS1=\"\$PS1\"'" /etc/profile.d/git-prompt.sh | cat -A
tmux -V && tree --version | head -1
source ~/.bash_profile && type ga gp gch tn ..       # alias 可加载
grep -q "end my-git-bash" ~/.bash_profile && echo "alias 段已追加"
grep -m1 email ~/.gitconfig                           # 身份未被改动

最后提醒用户:重启 Git Bash 才能让主题/字体/提示符/新 alias 生效。

回退

  • 提示符:cp /etc/profile.d/git-prompt.sh.bak /etc/profile.d/git-prompt.sh
  • alias编辑 ~/.bash_profile,删两个 # --- 之间的段落
  • tmuxrm /usr/bin/tmux.exe
  • 字体:控制面板 → 字体 → 删除 DejaVu Sans Mono for Powerline

平台/编码备忘

  • 调 Windows 原生命令(regshutdown 等)加 MSYS_NO_PATHCONV=1,防 /x 参数被路径转换。
  • 中文/GBK 程序输出在 UTF-8 终端会乱码,看退出码而非输出文字判断成败。
  • sed 分隔符选内容里不出现的字符(这里用 :),别用 ~//
  • 仓库已 cloned 到 D:\iflytekCode\my-git-bash2026-07-24 首装);新机器重装时重新 clone 即可,勿依赖旧路径。