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

使用quilt将符号链接转为普通文件并添加到补丁的问题求助

Quilt管理Deb包源码时,将符号链接转为普通文件的解决方案

问题背景

使用Quilt工具维护Deb包的源码变更,需要将项目内一个指向同目录下文件的符号链接转为普通文件,但操作过程中遇到多个报错:

目录结构示例

src
|..
├folder1
| |
| └symlink -> ../folder2/original_file
|
├folder2
| |
| └original_file
..

尝试过的操作及报错

  1. 直接用Quilt添加符号链接变更

    quilt new test.diff
    quilt add /src/folder1/symlink
    

    报错:Failed to add a symbolic link /src/folder1/symlink

  2. 改用dpkg-source提交变更

    dpkg-source --commit . my-patch.patch
    

    构建Deb包时触发报错:

    dpkg-source: error: failed to submit change to /src/folder1/symlink:
    dpkg-source: error: new version simple file
    dpkg-source: error: old version symlink to ../folder1/symlink
    dpkg-source: error: uncharacteristic changes in source
    
  3. 变通操作
    先创建空补丁,删除符号链接并替换为普通文件,再用quilt edit将变更添加到补丁——操作成功,但构建包时仍出现上述dpkg-source错误。

  4. 修改Quilt配置
    编辑/etc/quilt.quiltrc,给QUILT_PATCH_OPTS添加-E选项,无效果。

可行解决方案

问题根源是dpkg-source默认禁止符号链接与普通文件之间的类型转换,需调整配置并按正确流程操作:

  1. 手动完成符号链接转普通文件

    cd src/folder1
    rm symlink
    cp ../folder2/original_file symlink
    
  2. 允许dpkg-source接受非常规变更
    在项目的debian/source/options文件中添加以下配置(文件不存在则创建):

    --allow-unchanged-changes
    

    该选项会放宽dpkg-source对文件类型变更的限制。

  3. 用Quilt将变更加入补丁

    # 确保目标补丁处于活跃状态
    quilt push test.diff
    # 添加转换后的普通文件到补丁
    quilt add src/folder1/symlink
    # 更新补丁内容
    quilt refresh
    
  4. 重新构建Deb包
    此时dpkg-source会正常处理该变更,不再报错。

内容的提问来源于stack exchange,提问作者xemrok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:17:02