git - 如何将 Swift Package Manager 与私有(private)仓库一起使用?

标签 git swift-package-manager

如何将 Swift 包管理器与存储在私有(private)存储库中的依赖项一起使用?

添加用户名密码可以正常工作:

let package = Package(
  name: "MyPackage",
  dependencies: [
    .package(url: "https://username:password@gitlab.com/me/MyPackage.git", .branch("develop"))     
  ]
)

但是,username:password 方法存在一些问题,包括(但不限于)指定 Package.swift 用户名,以及将纯文本凭据放入存储库。

理想情况下,解决方案应该是:

  1. 不在存储库中存储任何纯文本或 token 凭据。
  2. 允许每个团队成员拥有自己的凭据。

最佳答案

我最终为“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/

相关文章:

swift - Swift 中的 import func、struct、class 和 @_exported 是什么?

python - 我不能忽略 Django 上的 pycache 和 db.sqlite,即使它在 .gitignore 中引用它们

git - 是否有用于滚动发布 Web 应用程序的 Git 工作流程?

git - 如何按首次添加到 Git 存储库的时间列出文件?

ios - 无法使用快速包管理器安装 firebase crashlytics

swift - 包加载 : "Ignoring duplicate product" (SwiftPM)

Git merge 自动添加所有新行

git - 如果队友已经推送了,我如何安全地提交更改

iOS Xcode SPM 未能解开父类(super class)

ios - 在 Xcode 11 中通过 FaSTLane 构建 SPM 包不起作用