Swift包管理器不支持Git LFS

46scxncf  于 11个月前  发布在  Git
关注(0)|答案(1)|浏览(93)

我给了私有库git仓库,它配置了LFS。我通过添加Package.swift文件将该库转换为SwiftSPM兼容。当我通过拖放将其添加到应用程序项目时,我的包在本地工作正常。但是如果我试图从Xcode添加为Swift包管理器,我会得到下面的错误

无法检出修订版本'cdd 1352 f7 a46 a3 eb 6 ea 2f 087 da 5 fd 4 e5 fcc 5254 c':
错误传输“f2 f56588141 b3 b3 fa 7 bb8 c136079 b5 b38 cf 8615441 dde 51 d90 aa 4fffdc 8db 342”:[0]远程缺少对象f2 f56588141 b3 b3 fa 7 bb8 c136079 b5 b38 cf 8615441 dde 51 d90 aa 4fffdc 8db 342

我通过几个链接

  1. https://developer.apple.com/forums/thread/676670
  2. Xcode 11 swift package manager unable resolve packages
  3. https://forums.swift.org/t/swiftpm-with-git-lfs/42396/4
    但对我来说没有任何效果:以下是我的设置细节
    Xcode 12.5 git-lfs/2.13.3(GitHub;达尔文arm64; go 1.16.2)git version 2.30.1(Apple Git-130)
    任何帮助将不胜感激。谢谢!!
cu6pst1q

cu6pst1q1#

我找到了一种方法来解决这个问题,它可以让那些想要同时使用LFS和SPM的人,不用让他们的包消费者添加安装/链接LFS的步骤。注意:这只适用于LFS中的文件是可选的,并且不需要作为包构建的一部分。在我的例子中,我们使用它来进行快照测试PNG(只需要运行测试,不需要构建/使用包)。
基本上,您使LFS成为可选的,并且只为包开发人员配置它,而不是包消费者。
步骤:

  • 从你的.gitattributes文件中删除lfs配置行,并签入此删除。确保此更改进入main/master,因为SPM检查我们的第一个,并将失败与LFS配置。
  • 将你删除的行移到你的.git/info/attributes文件中--这只对你是本地的,不会检入。这允许你作为软件包开发者继续使用LFS。我做了一个gitattributes_package_dev_template文件,里面有关于如何为其他软件包开发者在本地设置LFS的说明,并检入了这些说明。
  • 运行swift package purge-cache删除旧缓存
  • 尝试在另一个目录中克隆一个新的软件包。你应该看到下拉的文件是指针(~150字节),而不是巨大的二进制文件。很好,因为软件包安装很快,因为我们跳过了大文件。
  • 尝试在一个新的Xcode项目中安装你的包。它现在应该可以工作了!
  • 可选:将git lfs install && git lfs pull --include="*" --exclude=""添加到人们在进行本地软件包开发时运行的脚本中。这将安装LFS钩子,并将指针转换为二进制文件。
  • 如果你已经有发行版,请安装一个新的发行版。以前的发行版将被LFS问题卡住。

相关问题