

[IPython Notebook](http://ipython.org/index.html) で書いたコードをGitで管理したいのですが、
`*.ipynb`をコミットすると差分が見にくくて辛いです。

セル単位でコードが実行できる利点を残しながら、 Gitで差分が把握しやすい方法はないものでしょうか。


CC BY-SA 3.0
2014-12-17T13:50:00.473
1932
2014-12-17T16:10:00.847
2014-12-17T15:41:54.293
4142
4696
question
git python
IPython Notebook で書いたコードをGitで管理するには?


ソース：[こちら（英語）](https://stackoverflow.com/questions/18734739/using-ipython-
notebooks-under-version-control)の人気ある質問

iPythonを使っていないですが、まだ答えが出てないので見つけたことを知らせします。  
今のところ（２０１４年１２月）はちゃんとしたやり方がないみたいですが、以下の①でなんとできそうです。  
そして解決②でそろそろiPythonそのままでできそうです。

* * *

①
コミットと差分を普通通りにできるようなやり方。[ソース（英語）](https://stackoverflow.com/a/20844506/377366)

  1. gitフィルターを作成します。例えば： `~/bin/ipynb_output_filter.py`
[code]     #! /usr/bin/python

    
    import sys
    from IPython.nbformat.current import read, write
    
    json_in = read(sys.stdin, 'json')
    
    for sheet in json_in.worksheets:
        for cell in sheet.cells:
            if "outputs" in cell:
                cell.outputs = []
            if "prompt_number" in cell:
                cell.prompt_number = ''
    
    write(json_in, sys.stdout, 'json')
    
[/code]

  2. そのファイルを実行可能に変更します： `chmod +x ~/bin/ipynb_output_filter.py`

  3. `~/.gitattributes`に追加または新規で作成します
[code]     *.ipynb    filter=dropoutput_ipynb

    
[/code]

  4. 以下のコマンドでgitフィルターを設定します:
[code]     git config --global core.attributesfile ~/.gitattributes

    git config --global filter.dropoutput_ipynb.clean ~/bin/ipynb_output_filter.py
    git config --global filter.dropoutput_ipynb.smudge cat
    
[/code]

問題点：

  * **コミットしたら出力データが残りません！**
  * ソースであとの細かいこともあります。

* * *

② iPythonそのままで。[ソース（英語）](https://github.com/ipython/ipython/pull/6896)

こちらはまだはっきり理解していませんが、みんなにこの問題で困っているようなので、いつかきっと解決すると思います。  
使い方を聞きましたので答えが出ましたらここでアップします。


CC BY-SA 3.0
2014-12-17T15:12:19.550
1936
2014-12-17T16:10:00.847
2017-05-23T12:38:56.083
-1
4697
1932
answer