モーグルとカバとパウダーの日記

モーグルやカバ(EXカービング)山スキー(BC)などがメインの日記でした。今は仕事のコンピュータ系のネタが主になっています。以前はスパム対策関連が多かったのですが最近はディープラーニング関連が多めです。

ColabやJupyterのノートをgitで管理するための設定

ColabやJupyterのノートをgitで管理しようとすると、1行のJSONになっているためgitとは相性が悪いです。
また、出力部分はgitで管理したくない場合が多いと思います。(Colabの場合は出力を保存しない設定があるのでそれを使ってもよい)

そこで下記エントリにしたがい、jqを使ってgitのfilter設定をすると、JSONを適宜改行して、出力部分は削除してくれるため、gitでの管理に向いた形にしてくれます。

ni66ling.hatenadiary.jp

で、そこまではよかったのですが、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'