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

如何让Cabal拉取source-repository-package指定仓库的最新代码?

解决Cabal本地Git依赖无法更新的问题

问题分析

你当前的cabal.project里把分支master指定为tag,这是个小问题——tag是Git里固定的提交标记,而master是动态更新的分支,这会导致Cabal认为依赖版本是固定的,不会主动检查更新。另外,cabal update仅用于更新Hackage包索引,不会处理Git类型的源依赖。

解决方案

1. 临时快速更新:直接绑定本地目录

如果只是想快速用上本地仓库的最新代码,无需依赖Cabal缓存,可使用--with-source参数强制Cabal读取指定本地目录的最新内容:

cabal build --with-source=abcxyz=/home/chris/example/abcxyz

这个命令会跳过缓存直接使用本地abcxyz子目录的代码,适合本地依赖频繁更新的场景。

2. 强制拉取Git依赖更新

如果希望保留Cabal缓存机制,但更新到Git仓库的最新提交,可使用--fetch-repo参数强制检查并拉取所有源仓库的更新:

cabal build --fetch-repo

该命令会遍历所有配置的source-repository-package,检查对应仓库(这里是你的本地Git仓库)是否有新提交,并拉取最新版本。

3. 长期正确配置:使用分支而非Tag

修改cabal.project中的依赖配置,将tag: master改为branch: master(因为master是分支而非Tag):

packages: .

source-repository-package
  type: git
  location: /home/chris/example/
  branch: master
  subdir: abcxyz

之后运行cabal build --fetch-repo即可拉取分支的最新提交,后续需要更新时重复执行该命令即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 16:24:57