GNU Stow 常用 & 进阶命令速查

  • ~1.91K 字
  1. 1. 一、基本概念
  2. 2. 二、最常用命令
    1. 2.1. 1️⃣ 将 package 链接到 $HOME
    2. 2.2. 2️⃣ Dry-run
    3. 2.3. 3️⃣ 撤销(移除 symlink,不删真实文件)
  3. 3. 三、冲突处理(非常重要)
    1. 3.1. 4️⃣ 自动“收编”已有文件(adopt)
    2. 3.2. 5️⃣ 指定覆盖规则(不常用,谨慎)
  4. 4. 四、多 package 管理
    1. 4.1. 6️⃣ 同时 stow 多个 package
    2. 4.2. 7️⃣ 按顺序 stow(有依赖时)
  5. 5. 五、调试 & 排错命令
    1. 5.1. 8️⃣ 查看 stow 详细执行过程
    2. 5.2. 9️⃣ 只测试单个文件(定位冲突)
    3. 5.3. 🔟 查看版本(行为差异时很重要)
  6. 6. 六、自动化 & 脚本化(推荐)
    1. 6.1. 11️⃣ 一键初始化脚本示例
    2. 6.2. 12️⃣ 重置(常用于“全新机器”)
  7. 7. 七、常见坑位(必看)
    1. 7.1. ❌ 忘记指定 target
    2. 7.2. ✅ 永远显式指定
    3. 7.3. ❌ HOME 下已有普通文件导致“什么都没生成”
  8. 8. 八、推荐固定用法(记住这三条)

适用场景:

  • 管理 ~/.gitconfig.zshrc.vimrc.zsh_extensions 等 dotfiles
  • 使用 一个仓库 + 多 package(如 home / zsh / git)
  • 目标目录是 $HOME

一、基本概念

  • Stow 目录(stow dir):你的 HomeConfiguration 仓库根目录
  • Package:仓库下的一级目录(如 home/zsh/
  • Target:符号链接要生成到的目录(通常是 $HOME

📌 Stow 永远不会复制文件,只会创建 symlink


二、最常用命令

1️⃣ 将 package 链接到 $HOME

stow -t "$HOME" home

示例效果:

~/.zshrc -> HomeConfiguration/home/.zshrc

2️⃣ Dry-run

stow -n -v -t "$HOME" home

更详细(排错神器):

stow -n -vv -t "$HOME" home

3️⃣ 撤销(移除 symlink,不删真实文件)

stow -D -t "$HOME" home

三、冲突处理(非常重要)

4️⃣ 自动“收编”已有文件(adopt)

$HOME 下已经有 .zshrc.bat 等普通文件时:

stow --adopt -t "$HOME" home

作用:

  • ~/.xxx 移入仓库 home/.xxx
  • 再创建 symlink

⚠️ 用完一定要检查:

git diff

5️⃣ 指定覆盖规则(不常用,谨慎)

stow --override='.bat' -t "$HOME" home

仅对匹配的文件强制覆盖。


四、多 package 管理

6️⃣ 同时 stow 多个 package

stow -t "$HOME" home zsh git

7️⃣ 按顺序 stow(有依赖时)

stow -t "$HOME" home stow -t "$HOME" zsh

五、调试 & 排错命令

8️⃣ 查看 stow 详细执行过程

stow --debug -t "$HOME" home

9️⃣ 只测试单个文件(定位冲突)

stow -n -v -t "$HOME" home/.zshrc

🔟 查看版本(行为差异时很重要)

stow --version

六、自动化 & 脚本化(推荐)

11️⃣ 一键初始化脚本示例

#!/usr/bin/env bash 
set -e  

cd "$(dirname "$0")/.."  

stow -nvv -t "$HOME" home 
read -p "Proceed with stow? (y/N) " yn 
[[ $yn == "y" ]] || exit 1  

stow -vv -t "$HOME" home

12️⃣ 重置(常用于“全新机器”)

stow -D -t "$HOME" home 

stow -t "$HOME" home

七、常见坑位(必看)

❌ 忘记指定 target

stow home    # ❌ target 是仓库上级目录

✅ 永远显式指定

stow -t "$HOME" home

❌ HOME 下已有普通文件导致“什么都没生成”

解决方案之一:

stow -nvv -t "$HOME" home     # 先看冲突 

stow --adopt -t "$HOME" home # 或备份后再 stow

八、推荐固定用法(记住这三条)

# 预览(排错) 
stow -nvv -t "$HOME" home  

# 执行 
stow -vv -t "$HOME" home  

# 有旧文件时 
stow --adopt -vv -t "$HOME" home