ColabやJupyterのノートをgitで管理しようとすると、1行のJSONになっているためgitとは相性が悪いです。
また、出力部分はgitで管理したくない場合が多いと思います。(Colabの場合は出力を保存しない設定があるのでそれを使ってもよい)
そこで下記エントリにしたがい、jqを使ってgitのfilter設定をすると、JSONを適宜改行して、出力部分は削除してくれるため、gitでの管理に向いた形にしてくれます。
で、そこまではよかったのですが、Windows上のSourcetreeで使っていると時々、修正を行っていなくても
\ No newline at end of file
というエラーがでてしまって困っていました。
これはファイルの最終行が改行で終わっていないことで出るエラーなのですが、jqが処理した後の出力の最終行に改行がないことで出ています。
でどうしたものかと思ったのですが、jqでこれ対策用の設定がありました。
jq Manual (development version)
--binary / -b:
Windows users using WSL, MSYS2, or Cygwin, should use this option when using a native jq.exe, otherwise jq will turn newlines (LFs) into carriage-return-then-newline (CRLF).
ということで「binary」オプションをつけてやるとちゃんと最後に改行つけて吐き出してくれるようでした。
ので上記エントリの「clean=jq …」のところの呼び出しに、下記のように「-b」つけてやることで解決しました。
clean = jq -b --indent 2 --monochrome-output '. + if .metadata.git.suppress_outputs | not then { cells: [.cells[] | . + if .cell_type == \"code\" then { outputs: [], execution_count: null } else {} end ] } else {} end'