📦

Swift Package Manager で git-lfs を扱えるようにする

2023/09/01に公開

こんなエラーメッセージに見覚えがあるあなたへ

Couldn’t check out revision ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’:
git-lfs filter-process: git-lfs: command not found
fatal: the remote end hung up unexpectedly
Couldn’t check out revision ‘XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX’:
error: external filter 'git-lfs filter-process' failed
fatal: Sources/XXXX/XXXX: smudge filter lfs failed

git-lfsで管理されたファイルを含むSwift Packageを作成し、利用しようとすると上記のようなエラーに遭遇するかと思います。

Swift Package Managerではgit-lfsは扱えないのでしょうか?

いいえ、Swift Packageを作成する側・利用する側で、下記に示す設定をすれば、git-lfsで管理されたファイルを含んだSwift Packageが作成・利用できるようになります。

Swift Packageを作成する側で必要な設定

特定のファイルをgit-lfsで管理するためには、以下のようなコマンドによって、.gitattributeをリポジトリにpushする必要があります。

git lfs track "*.mlmodel"

しかし、Swift Packageでgit-lfsを扱えるようにするためには、これだけでは足りません。さらに以下のようなコマンドで

git config -f .lfsconfig lfs.url https://github.com/thenagain/my-repository.git/info/lfs

.lfsconfigをリポジトリにpushする必要があります。

Swift Packageを利用する側で必要な設定

利用する側では、以下のコマンドを実行する必要があります。

ln -s $(which git-lfs) $(xcode-select -p)/usr/bin/git-lfs

コマンド実行時、下記のようなエラーが出る場合、

ln: /Applications/Xcode.app/Contents/Developer/usr/bin/git-lfs: Operation not permitted

システム設定 > プライバシーとセキュリティ > フルディスクアクセスで使用しているターミナルアプリのアクセスを許可することで上記のコマンドが通るようになります

Discussion