我已将直接来自本地 Git 存储库的依赖项包含在我的 cabal.project 文件中,如下所示:
packages: .
source-repository-package
type: git
location: /home/chris/example/
tag: master
subdir: abcxyz
最初,运行
cabal build
成功获取存储库,并且项目编译没有问题。然而,更新存储库后,我似乎找不到正确的方法来让 Cabal 识别这些更新并获取最新的提交。有多种方法可以清除缓存,但随后我会删除其他内容并花费更多时间拉取和构建内容(这对于频繁更新外部存储库来说不太实用)。
我尝试重新运行
cabal build
和 cabal update
,但 Cabal 似乎不会像上面那样检查已获取的 Git 存储库的更新。我还快速阅读了https://cabal.readthedocs.io/en/3.4/cabal-project.html,但我没有看到任何提及此类功能的信息。
我该怎么做?
我希望
cabal
模型标签是不可变的。当然,你我都知道没有办法强制执行这一点,但这似乎确实是 git 爱好者之间的一个相当强大的约定。
如果您计划更新要经常使用的提交,请从标签切换到提交:
source-repository-package
type: git
location: /home/chris/example/
commit: deadbeef
subdir: abcxyz
然后根据需要更新
cabal.project
中列出的提交。
不需要显式更新 cabal(但确实需要显式更新 git)的替代流程是将其他存储库放入子模块中。在您的
cabal.project
中,输入类似的内容
packages: . example/abcxyz
然后运行这样的命令:
% git submodule add /home/chris/example example
当然,如果您想对同事友好,您需要使存储库在线可用,而不是在
/home/chris
中,并在那里引用它。但是 source-repository-package
方法和子模块方法都是如此。