You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 21:13:26