如何使用存储在私有存储库中的依赖项的Swift包管理器?
添加username
和password
可以在功能上工作:
let package = Package(
name: "MyPackage",
dependencies: [
.package(url: "https://username:[email protected]/me/MyPackage.git", .branch("develop"))
]
)
但是,username:password
方法存在的问题包括(但不限于)指定Package.swift
用户名,以及将纯文本凭据放入存储库。
理想情况下,解决方案是:
我最终为nix类型系统找到的一个解决方案是使用SSH git
URL并将Host
配置添加到~/.ssh/config
。
在Package.swift
中使用ssh表单作为依赖关系网址。
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "Example",
dependencies: [
.package(url: "[email protected]:abc/private-resource.git", .branch("develop") ),
],
)
在上面的例子中,gitlab.com.myteam
对应于Host
中的~/.ssh/config
### GITLAB WorkTeamOne
Host gitlab.com.myteam
HostName gitlab.com
User my_work_username
IdentityFile ~/.ssh/my_work_key_rsa
UseKeychain yes
AddKeysToAgent yes
PreferredAuthentications publickey
### GITLAB Hobby
Host gitlab.com.hobby
HostName gitlab.com
User my_hobby_username
IdentityFile ~/.ssh/my_hobby_key_rsa
UseKeychain yes
AddKeysToAgent yes
PreferredAuthentications publickey
可以根据帐户的需要生成SSH密钥对,并将其应用于个人的在线git服务。
ssh-keygen \
-b 4096 \
-t rsa \
-C "[email protected]" \
-f ~/.ssh/my_work_key_rsa
每个团队成员都会设置一个单独的,相应的Host
ssh配置。 Host
将是相同的,但是,实际的公钥/私钥对(a)是特定于用户的,(b)可以与任何代码开发分开管理,(c)可以在设置之后自动使用。