3.1.6 编辑包所用的远程依赖

原文链接: https://docs.swift.org/latest/documentation/packagemanagerdocs/editingdependencypackage/

3.1.6 编辑包所用的远程依赖

把远程依赖临时切换为本地依赖,以便编辑该依赖。

概述

当你的工作需要改动某个依赖时(例如修复一个缺陷,或添加一个新 API),Swift 包管理器支持编辑依赖。包管理器会把这个依赖移动到一个可编辑的 Packages/ 目录下。

对于处于可编辑状态的包,swift build 会使用该目录中确切的源码来构建,无论它们处于什么状态、Git 仓库状态如何、标签是什么,或者依赖解析想用的是哪个标签。换句话说,它就是用现有的源码来构建。当存在可编辑的包时,它会用来满足依赖图中该包的所有出现。你可以编辑依赖图中的全部、部分或不编辑任何包,没有任何限制。

可编辑包最适合用来对依赖代码做实验,或者在依赖所有者的仓库(上游)中创建并提交补丁。把包置于可编辑状态有两种方式,使用 swift package edit。第一个例子从当前已解析的版本创建一个名为 bugFix 的分支,并把依赖 PlayingCard 放入 Packages/ 目录:

1
$ swift package edit PlayingCard --branch bugFix

第二种方式类似,只是包管理器会把依赖留在你所指定的提交上的分离头指针(detached HEAD)状态。

1
$ swift package edit PlayingCard --revision 969c6a9

注意:如果没有提供分支或修订选项,包管理器会在分离头指针状态使用当前已解析的版本。

包处于可编辑状态之后,你可以进入 Packages/PlayingCard 目录进行修改,构建之后推送这些改动,或者向上游仓库发起拉取请求。

你可以用 swift package unedit 结束对包的编辑。

1
$ swift package unedit PlayingCard

这会从 Packages/ 中移除被编辑过的依赖,并恢复最初解析到的版本。

如果你有未提交的改动,或者有尚未推送到远程仓库的改动,这个命令会失败。如果你想丢弃这些改动并取消编辑,请使用 --force 选项:

1
$ swift package unedit PlayingCard --force

主干开发

这个特性允许用文件系统上的本地检出覆盖某个依赖。这个检出完全不受包管理器管理,并按原样使用。唯一的要求是,被覆盖的检出中的包名不应改变。这在并行开发多个包,或者让某些包与某个应用一起开发时很有用。

附加(或创建)本地检出的命令是:

1
2
$ swift package edit <package name> \
    --path <path/to/dependency>

例如,如果 PlayingCard 依赖 swift-collections,而你在 /workspace/swift-collections 有一份 swift-collections 的检出:

1
2
$ swift package edit swift-collections \
    --path /workspace/swift-collections

如果在你指定的路径上不存在 swift-collections 的检出,就会创建一个。如果检出已存在,包管理器会校验该路径上的包名,并附加到它上面。

包管理器还会在 Packages/ 目录中创建一个指向该检出路径的符号链接。

使用 swift package unedit 命令来停止使用本地检出:

1
$ swift package unedit swift-collections