📦
Swift Package Manager で git-lfs を扱えるようにする
こんなエラーメッセージに見覚えがあるあなたへ
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