关于 habitat-usage
habitat-usage 是 Habitat 依赖同步工具的使用指南技能,面向维护多 Git 仓库和资产依赖的开发者。它提供配置示例、同步建议与故障排查步骤。
主要功能
- 01配置 .habitat 与 DEPS
- 02管理 Git 和嵌套解决方案依赖
- 03下载 HTTP 资产并校验完整性
- 04执行自定义同步操作
- 05排查同步错误与超时
适用场景
- 01搭建主仓库及依赖仓库工作区
- 02配置归档文件或工具链下载
- 03诊断认证、网络或校验失败
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lynx-community/ skills --skill habitat-usage安装后在 Claude Code 中输入/habitat-usage确认已加载。
附带文件scripts/index.mjs
详细介绍
Habitat 使用指南
Habitat 是一种依赖同步工具,适用于由多个 Git 仓库和资源下载构成的类似单体仓库的布局。本技能提供设置指南、可直接复制粘贴的配置片段,以及常见同步故障的排查清单。
适用场景
- 使用
.habitat+DEPS设置“主仓库 + 依赖仓库/资源”工作区 - 添加或更改依赖类型:Git 仓库、嵌套 solution、HTTP 下载或自定义操作
- 排查与配置、身份验证、网络或完整性检查相关的
hab sync失败
故障排查所需信息
同步失败时(获取错误、权限问题、超时),请收集:
- Habitat 版本和分发形式(仓库中的
./hab包装器、hab.pex等) - 操作系统和架构(darwin/windows/linux + arm64/x86_64)
- 完整命令和完整错误输出(请勿粘贴任何机密信息)
- 相关配置片段:
.habitatDEPS(或.habitat中deps_file指向的文件)
安装和版本管理
建议将 Habitat 包装器(hab)和配置文件(.habitat、DEPS)提交到仓库中,以便开发者和 CI 使用相同的版本和配置。
避免在自动化流程中下载 releases/latest,因为这无法保证可复现。应固定到特定的发布版本(标签),并确保开发者和 CI 使用的固定版本一致。
HABITAT_VERSION="0.3.145"
curl -L -o hab "https://github.com/lynx-family/habitat/releases/download/${HABITAT_VERSION}/hab"
chmod +x hab
如果只是想在本地试用 Habitat(不建议用于 CI),可以下载最新发布版本:
curl -L -o hab "https://github.com/lynx-family/habitat/releases/latest/download/hab"
chmod +x hab
如果需要完整性验证,请在仓库/CI 中固定 hab 的预期 SHA-256,并在下载后进行验证:
EXPECTED_SHA256="<fill-me>"
if command -v shasum >/dev/null 2>&1; then
echo "${EXPECTED_SHA256} hab" | shasum -a 256 -c -
else
echo "${EXPECTED_SHA256} hab" | sha256sum -c -
fi
多仓库设置(solutions + deps)
1) 生成 .habitat(solution 配置)
在主仓库根目录生成 Habitat 配置:
./hab config <repo remote uri>
.habitat 描述一个或多个 solutions。最简示例:
solutions = [
{
"name": ".",
"deps_file": "DEPS",
"url": "[email protected]:namespace/repo.git",
}
]
字段:
name:solution 名称,主仓库通常使用"."deps_file:依赖清单路径(相对于主仓库根目录)url:主仓库远程 URL(供工具/CI 使用)
2) 编写 DEPS(依赖清单)
在 DEPS 中定义 deps = { ... }。键是主仓库中的目标路径,值描述依赖类型及其参数。
2.1 git deps(源代码仓库)
deps = {
"lib/example": {
"type": "git",
"url": "[email protected]:namespace/lib.git",
"branch": "dev",
}
}
注意:
- 为确保可复现,优先使用稳定的引用(例如提交);若需要持续更新,则使用分支。
- 如果目标目录已存在且包含本地更改,请在同步前确认是否可以覆盖。
2.2 solution deps(嵌套 solutions)
如果某个依赖有自己的依赖树,可以将其作为 solution 引入并递归同步:
deps = {
"third_party/some_solution": {
"type": "solution",
"url": "[email protected]:namespace/solution_repo.git",
"branch": "main",
"deps_file": "DEPS",
}
}
2.3 http deps(资源/归档文件/二进制文件)
可用于下载归档文件、工具链、模型文件等。为确保可验证和可复现,建议提供完整性检查:
deps = {
"third_party/tooling": {
"type": "http",
"url": "https://example.com/tooling.zip",
"sha256": "SHA256_HEX",
}
}
2.4 action deps(自定义同步操作)
可用于在同步期间执行额外步骤(生成文件、复制资源、应用补丁等)。示例:
def example_function():
from pathlib import Path
import shutil
dest_dir = Path("scripts/sync_something")
dest_dir.mkdir(parents=True, exist_ok=True)
src = dest_dir / "input.txt"
dst = dest_dir / "output.txt"
src.write_text("example\n", encoding="utf-8")
shutil.copyfile(src, dst)
deps = {
"scripts/sync_something": {
"type": "action",
"function": example_function,
}
}
同步依赖(hab sync)
在主仓库根目录运行:
./hab sync .
同步后,依赖会写入 DEPS 中各个键指定的路径。
在版本控制中跟踪配置
提交包装器和配置文件,以便开发者和 CI 能通过一条命令完成引导设置:
git add hab .habitat DEPS && git commit -m "Add habitat to manage dependencies."
常见问题 / 常见故障
1) git 权限/身份验证失败
症状:
- 出现类似
Permission denied、Authentication failed或Could not read from remote repository的错误
解决方法:
- 确保依赖项的
url协议与当前环境相符(SSH/HTTPS)。 - 对于 SSH,请确认已配置 SSH 密钥,且该密钥有权访问目标仓库。
- 在 CI 中,确认运行器已配置正确的凭据。
2) http 完整性检查失败(sha256 不匹配)
症状:
- 下载成功,但完整性验证失败
修复方法:
- 检查
url内容是否发生变化,或是否重定向到不同内容。 - 为实际制品重新计算 sha256,并更新
DEPS中的sha256。 - 如果 URL 会滚动变化(例如 “latest”),优先使用不可变的版本化 URL。
3) 同步卡住/超时
修复方法:
- 找出哪个依赖速度较慢(暂时注释掉其他依赖并通过二分法排查)。
- 检查代理设置、DNS 和网络连通性。
- 对于大型 git 依赖,可考虑固定到某个提交,并减少不必要的历史记录(如果你的设置支持)。
响应格式(协助用户时)
用户询问如何配置依赖、修复错误或加快同步时,请按以下顺序回复:
- 先给出结论(根本原因 + 修复方法)
- 提供可直接复制粘贴的最简命令/代码片段(
.habitat/DEPS/./hab sync .) - 指出有风险的操作(覆盖本地目录、滚动依赖损害可复现性等)
- 如果仍可能失败,列出下一步所需的信息(版本、完整错误日志、相关配置片段)