Pythonとデータサイエンスの.gitattributes

Jupyterノートブック、データファイル、学習済みモデル、科学計算アーティファクトを含むPythonプロジェクト用の.gitattributes設定方法。

Language-Specific

詳細な説明

Python / データサイエンスの.gitattributes

Pythonデータサイエンスプロジェクトは、ソースコード、Jupyterノートブック、大規模なデータセット、学習済みモデルファイルを組み合わせます。各カテゴリには異なるGitの処理が必要です。

推奨設定

# 自動検出
* text=auto

# Pythonソース
*.py     text diff=python
*.pyx    text diff=python
*.pxd    text diff=python
*.pyi    text diff=python

# 設定 / パッケージング
*.cfg    text
*.ini    text
*.toml   text
*.yaml   text
*.yml    text
setup.py text diff=python
pyproject.toml text

# Jupyterノートブック
*.ipynb  text -diff

# ロックファイル
poetry.lock   text -diff
Pipfile.lock  text -diff
requirements.txt text

# データファイル(テキストベース)
*.csv    text
*.tsv    text
*.json   text
*.jsonl  text
*.xml    text

# データファイル(バイナリ)
*.pkl    binary
*.pickle binary
*.parquet binary
*.feather binary
*.hdf5   binary
*.h5     binary
*.npy    binary
*.npz    binary
*.arrow  binary

# 学習済みモデル
*.pt     binary
*.pth    binary
*.onnx   binary
*.pb     binary
*.tflite binary
*.joblib binary

# Pythonコンパイル済み
*.pyc    binary
*.pyd    binary
*.so     binary
*.egg    binary
*.whl    binary

# 画像 / プロット
*.png    binary
*.jpg    binary
*.jpeg   binary
*.svg    text

# シェルスクリプト
*.sh     text eol=lf

Jupyterノートブックと-diff

Jupyter .ipynbファイルは、埋め込み出力(base64エンコードされた画像、HTMLテーブルなど)を含むJSONです。ノートブックの標準diffはほとんど読めません。text -diffを使用することで行末の正規化を確保しながら、ノイズの多いdiffを抑制します。

より良いノートブックdiffには、nbdimeなどのツールを検討してください:

# .gitconfigで
[diff "jupyternotebook"]
  command = git-nbdiffdriver diff
[merge "jupyternotebook"]
  command = git-nbmergedriver merge %O %A %B %L %P
# .gitattributesで(nbdimeを使用)
*.ipynb text diff=jupyternotebook merge=jupyternotebook

モデルとデータファイル

学習済みモデル(.pt.onnx.pb)とデータファイル(.parquet.hdf5)はバイナリです。大きなモデルにはGit LFSを検討してください:

*.pt  filter=lfs diff=lfs merge=lfs -text
*.h5  filter=lfs diff=lfs merge=lfs -text

ユースケース

Python、Jupyterノートブック、大規模データセットを扱う機械学習およびデータサイエンスチームは、ワークフローに含まれるさまざまなファイル形式を処理するためにこれらの属性が必要です。適切な設定により、ノートブックのマージコンフリクトとモデルファイルの破損を防ぎます。

試してみる — .gitattributes Generator

フルツールを開く