单体仓库很大、只想处理其中一个服务时,可以用 Git 的 sparse-checkout,工作区只保留目标目录,其他文件不会铺满编辑器。
环境:Git 2.25+。下面是一个本地可运行的小例子:
mkdir sparse-demo && cd sparse-demo
git init -q
git config user.email [email protected]
git config user.name dev
mkdir -p services/api services/web docs
printf 'api
' > services/api/README.md
printf 'web
' > services/web/README.md
printf 'docs
' > docs/README.md
git add . && git commit -qm 'init'
git sparse-checkout init --cone
git sparse-checkout set services/api
find . -maxdepth 3 -type f | sort
这时工作区里只会看到 services/api 和 Git 自己的文件。要换服务时直接执行:
git sparse-checkout set services/web
它只影响工作区,不会删掉提交历史;需要完整目录时用 git sparse-checkout disable 恢复即可。多目录一起处理也可以把目录写在同一条 set 命令里。