macOS 13.1 (Ventura) SourceTree で git-lfs filter-process: git-lfs: command not found を解決する

# 発生した問題
MacBook Air (M2 2022)で、SourceTree（4.2.0）を使って差分を取得する際に、
git-lfs filter-process: git-lfs: command not found
というエラーが出て取得することができない。


### SourceTreeを使った差分データの書き出しはこのあたりを参照
https://ics.media/entry/4475/
https://and-ha.com/coding/sourcetree-commit-diff/

ちなみに、SourceTree（4.2.0）において、上記設定中、設定＞カスタムアクション　のタブが
グレーアウトして編集できない問題は　以下参考に解決。英語に一度切り替えて設定。
それか、操作＞カスタムアクション＞編集　が動くかもしれない。

# 原因（と思われること）
SourceTreeが、git-lfsコマンドを参照できる場所にパスが通っていないため、エラーとなっている。
解決するために、パスを設定したいが
macOS 13(より以前でも、おそらくは１１以降？）では、重要なコマンドが置かれている場所へのシンボリックリンクを設定することができない。そのため以下のようなコマンドを実行することができない。
```
sudo ln -s /usr/local/bin/git-lfs /usr/bin/
```
これを実行すると`ln: cannot create /usr/bin//git-lfs : Read-only file system`となって設定できない。

これを解決するのに、数個の記事を使ってなんとか解決したので、同様の問題がある場合に役立てて欲しい。

# 解決手順

参考にした記事
「macOS Big Sur 」でgit-lfs filter-process: git-lfs: command not foundに対応する
https://builtfunc.com/news/2220/

https://stackoverflow-com.translate.goog/questions/73048614/can-i-mount-the-root-system-filesystem-as-writable-in-macos-monterey?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc

https://superuser-com.translate.goog/questions/1715785/macos-12-3-1-bless-folder-as-bootable-snapshot?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc

## 1 macOSのセキュリティ部分を３つ解除する　
※幾つかのコメントにもありますが、この対応はmacOSが一般的な利用で操作できないようにしている部分を解除するやり方になるのでその点を理解した上で実施した方が良いと思います。

１） FileVault を無効にする (システム環境設定 → セキュリティとプライバシー → FileVault)
２）　System Integrity Protection (SIP) を無効にして、Signed System Volume (SSV)も無効にする。
手順
まず、MacBookを終了させる。その後、電源ボタンを**押し続けながら**起動します。
「起動オプションを読み込み中」と表示されるまで、Macの電源ボタンを押したままにします。
画面にハードディスクのアイコンと、歯車の設定が選べるので、歯車の設定の方を選択します。

https://support.apple.com/ja-jp/guide/mac-help/mh21245/mac

その後、自分のアイコンを選択して、パスワードを入れて進み、「ターミナル」を起動させる。
以下参照
https://blog.kabocy.com/repair-custom/3496/

```
csrutil disable
csrutil authenticated-root disable
reboot
```
１つめはちょっとだけ時間がかかる
再起動を行う。

ここまでで、暗号化の解除、SIP、SSVの解除が終了。

## 2 マウント用のディレクトリを作る
参考サイトに沿って対応。

### 1. マウント用のディレクトリを作成
~~~
% mkdir ~/mount
~~~
このmountはフォルダ名なので適当に決めてOK 以下mountとして解説

### 2. 「APFSシステムスナップショット」のデバイス名を控える
ディスクユーティリティ　から 該当部分のデバイス名を控えておく。
この時、disk1s2s3　だった場合には、末尾のs3を取って　disk1s2　とする。

![hdd.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/224787/9bb4d27d-b643-d18b-cc72-6387471dfd79.png)

### 3. ディレクトリにマウントする
```
% sudo mount -o nobrowse -t apfs /dev/disk3s1 ~/mount
```
この「disk3s1」は自分の控えたものに置き換える

### 4. git-lfsコマンドのシンボリックリンクを作成
私は、homebrewを使ってインストールしたので、`type git-lfs`の結果
`git-lfs is /opt/homebrew/bin/git-lfs`となっているので、

```
% sudo ln -s /opt/homebrew/bin/git-lfs ~/mount/usr/bin/
```

### 4. ルートデバイスとして登録
```
sudo bless --mount ~/mount/System/Library/CoreServices --setBoot --create-snapshot
```
ここが今回の最もハマった場所で、どの記事をみても
` % sudo bless -folder ~/mount/System/Library/CoreServices --bootefi --create-snapshot`
を実行としか書いてない。これを実行すると、
`bless: The 'folder' option is only supported for external media on Apple Silicon devices.`
となって　Appleシリコンだとなんかダメぽい。詰んだかーーー！と思っていたら、上記の英語記事に救世主がいた。

どうやら、`-folder`を`--mountに`、`--bootefi`を`--setBoot`に変更することでプログラムを実行することができた。 

https://superuser-com.translate.goog/questions/1715785/macos-12-3-1-bless-folder-as-bootable-snapshot?_x_tr_sl=en&_x_tr_tl=ja&_x_tr_hl=ja&_x_tr_pto=sc

### 5. 再起動
```
% sudo reboot
```

改めて、SourceTreeを開いて、差分を取ると、無事エラーもなく差分ファイルを取ることができた。

# まとめ
新しいOSになって、容易にシンボリックリンクを登録することができなくなっている。
そもそもSourceTreeの設定に、git-lfsの使用場所を設定する部分があるのだが、そこを実際参照しているのかどうかが怪しい。いくつか切り替えてみたが、動作に差はなかった。

静的なWebサイトを更新する際の、SourceTreeでの差分抽出は非常に便利なのでこの機能がないと
普段の更新作業がとても難しいことになる。

しかしながら、この際SourceTree以外でも差分を取る方法も模索したのだが、diffとしての差分の視覚化ツールはあっても
具体的な差分ファイルを抜き出すアプリケーションはMacでは「scone Diff」　https://sconeapp.com/diff/
くらいで、あまり業界全体で差分ツールの需要がないところをみると、もうすでにローカルで開発したものをFTPで差分でサーバーにアップする運用自体が業界から無くなっているのかもしれないと思った。

その辺りも今後、知っていけたらと思う。