git稀疏检出场景下如何仅解密部分文件而非全库执行git-crypt unlock
git-crypt稀疏检出场景下部分解密解决方案
报错根因
git-crypt unlock默认会遍历仓库中所有匹配.gitattributes加密规则的文件执行解密操作,稀疏检出模式下未拉取的文件不存在于本地工作区,git无法匹配到对应路径,因此抛出路径不匹配错误。
解决方案
方案一:使用高版本git-crypt指定路径解锁(推荐)
git-crypt 0.7.0及以上版本已原生支持指定路径解锁功能,通过--path参数传入需要解密的目录即可,不会扫描未检出的文件路径:
# 解密单个目录 git-crypt unlock --path <dir1> # 解密多个目录,重复添加--path参数即可 git-crypt unlock --path <dir1> --path <dir2>
方案二:低版本git-crypt手动解密
如果使用的git-crypt版本低于0.7.0,没有--path参数,可以通过手动导出密钥批量解密指定文件的方式实现:
- 首先在已正常解锁的完整仓库中导出git-crypt密钥(本地已有留存密钥可跳过该步骤)
git-crypt export-key ~/repo-crypt.key
- 回到稀疏检出的仓库,针对需要解密的目录执行批量解密
# 替换<dir1> <dir2>为实际需要解密的目录路径 find <dir1> <dir2> -type f -exec git-crypt smudge --key ~/repo-crypt.key {} \;
稀疏检出操作优化
你提到的直接添加多个目录后检出异常的问题,是操作语法问题,不需要多次执行add+checkout,使用set参数一次传入所有需要的路径即可:
g sparse-checkout init # set参数会直接覆盖稀疏检出路径列表,一次传入所有需要的目录 g sparse-checkout set <dir1> <dir2> g checkout master
内容的提问来源于stack exchange,提问作者pkaramol
相关产品推荐
相关产品推荐

