NixOS中无法创建符号链接:文件名过长问题求助
解决方案
为什么core.longpaths=true没用?
这个配置是Windows专属的,用来突破Windows默认的260字符路径限制,Linux系统下的Git根本不会读取这个配置,所以在NixOS上操作完全无效。
可行解决方法
1. 缩短子模块本地路径
如果子模块在主仓库里的挂载路径太长,直接给它换个短路径:
- 先清理之前失败的子模块残留:
git submodule deinit -f <原失败的子模块路径> rm -rf .git/modules/<子模块名称> # 编辑.gitmodules文件,删除对应子模块的条目 - 重新添加子模块时指定短路径:
git submodule add --name content <子模块仓库地址> ./content
这样子模块内的文件路径加上挂载路径的总长度会大幅缩短,避开长度限制。
2. 调整NixOS文件系统的路径长度限制
大部分Linux文件系统(比如ext4)默认允许的完整路径长度是4096字节,如果你的路径超过这个值,可以尝试重新挂载文件系统并调整参数:
sudo mount -o remount,name_max=4096 /
注意:如果你的工作目录在其他挂载点(比如加密分区、单独的/data分区),需要把命令里的/换成对应的挂载路径。
3. 缩短子模块内的文件路径
直接从根源解决:把Obsidian库中那些路径过长的文件移动到更浅的目录下,重新创建硬链接并推送到子模块仓库。这样克隆时所有文件的路径都会缩短,自然不会触发长度报错。
4. 使用Git稀疏检出
如果子模块里只有部分Markdown文件需要用到,可以只拉取需要的内容,避免处理长路径文件:
- 初始化子模块但不完整检出:
git submodule update --init --no-checkout <子模块路径> - 进入子模块目录,启用稀疏检出:
cd <子模块路径> git config core.sparseCheckout true - 编辑
.git/info/sparse-checkout文件,添加你需要的文件/目录(比如只需要根目录下的md文件:*.md,或者特定目录:notes/*) - 执行检出:
git checkout
内容的提问来源于stack exchange,提问作者Catalina Cuellar
相关产品推荐
相关产品推荐

