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

188 lines
8.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
name: install-my-git-bash
description: "在 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-encoding``user-iflytek-embedded-dev`
## 第 0 步:预检(先跑,结果决定后续)
```bash
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 步:克隆仓库
```bash
git clone https://github.com/xnng/my-git-bash # 国内不畅可换 gitee: https://gitee.com/xnng/bash.git
cd my-git-bash
```
## 第 2 步:备份系统 git-prompt.sh
```bash
cp /etc/profile.d/git-prompt.sh /etc/profile.d/git-prompt.sh.bak
```
## 第 3 步:安装 Powerline 字体(管理员)
```bash
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 注意分隔符**不能**用 `~``/`,因为内容里有 `~`/`/`
```bash
cp .minttyrc ~ # 不存在才直接 cp已存在则先备份再覆盖
cp git-prompt.sh /etc/profile.d/git-prompt.sh
```
## 第 5 步tmux 本体 + 配置
```bash
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 启动;用户不要就跳过。
```bash
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 用 `:` 作分隔符(避开内容里的 `~``/`
```bash
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
```bash
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`/`gbk``sed -i 's/GBK/UTF-8/'` 单引号嵌套错误,且用户已有自己的方案) |
| 有用且用户没有 | **追加** | git 快捷键 `ga/gc/gp/gl/gb/gch/gm`、导航 `.. / ... / ,``e`/`cls`、tmux `tn`/`ta``bashalias`/`gitconfig`(用 `code` 打开配置)、`ep`/`c` |
追加用 heredoc`'EOF'` 带引号防展开),**带防重复检查 + 日期标记**
```bash
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
## 验证
```bash
# 箭头已是 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`,删两个 `# ---` 之间的段落
- tmux`rm /usr/bin/tmux.exe`
- 字体:控制面板 → 字体 → 删除 `DejaVu Sans Mono for Powerline`
## 平台/编码备忘
- 调 Windows 原生命令(`reg``shutdown` 等)加 `MSYS_NO_PATHCONV=1`,防 `/x` 参数被路径转换。
- 中文/GBK 程序输出在 UTF-8 终端会乱码,看退出码而非输出文字判断成败。
- sed 分隔符选内容里不出现的字符(这里用 `:`),别用 `~`/`/`
- 仓库已 cloned 到 `D:\iflytekCode\my-git-bash`2026-07-24 首装);新机器重装时重新 clone 即可,勿依赖旧路径。