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