如何将 Swift 包管理器与存储在私有(private)存储库中的依赖项一起使用?
添加用户名
和密码
可以正常工作:
let package = Package(
name: "MyPackage",
dependencies: [
.package(url: "https://username:password@gitlab.com/me/MyPackage.git", .branch("develop"))
]
)
但是,username:password
方法存在一些问题,包括(但不限于)指定 Package.swift
用户名,以及将纯文本凭据放入存储库。
理想情况下,解决方案应该是:
- 不在存储库中存储任何纯文本或 token 凭据。
- 允许每个团队成员拥有自己的凭据。
最佳答案
我最终为“unix”类型系统找到的一个解决方案是使用 SSH git
URL 并将 Host
配置添加到 ~/.ssh/配置
。这种方法适用于 macOS/Linux 命令行和 Xcode。
在 Package.swift
中使用 ssh 形式作为依赖项 url。
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "Example",
dependencies: [
.package(url: "git@gitlab.com.myteam:abc/private-repo.git", .branch("develop") ),
],
)
在上面的例子中,gitlab.com.myteam
对应于~/.ssh/config
中的一个Host
### GITLAB WorkTeamOne
Host gitlab.com.workteam
HostName gitlab.com
User git
IdentityFile ~/.ssh/my_work_key_rsa
UseKeychain yes # for macOS keychain
AddKeysToAgent yes # for macOS keychain
PreferredAuthentications publickey
### GITLAB Hobby
Host gitlab.com.hobby
HostName gitlab.com
User git
IdentityFile ~/.ssh/my_hobby_key_rsa
UseKeychain yes # for macOS keychain
AddKeysToAgent yes # for macOS keychain
PreferredAuthentications publickey
SSH key 对可以根据需要为帐户生成并应用于个人的在线 git 服务。
ssh-keygen \
-b 4096 \
-t rsa \
-C "my_work_username@example.com" \
-f ~/.ssh/my_work_key_rsa
每个团队成员都可以设置一个单独的、对应的Host
ssh 配置。 Host
将是相同的,但是,实际的公钥/私钥对 (a) 特定于用户,(b) 可以与任何代码开发分开管理,并且 (c) 可以设置后自动使用。
关于git - 如何将 Swift Package Manager 与私有(private)仓库一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47842479/