Obsidian Smart Composerの巨大ファイルをGit履歴から削除

![250311_smartcomposer_opt.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184128/99a86c71-0cbf-4a90-b319-93db1fc56afb.jpeg)

## はじめに

ObsidianにLLM（特にローカルLLM）を統合する取り組みとして「Smart Composer」プラグインを導入したところ、予想以上に大容量（約300MB）のインデックスファイルが生成され、GitHubの容量制限（100MB）を超え、Git pushができなくなりました。

Markdownファイルだけを扱うシンプルな環境とは異なり、大規模ファイルを伴うLLM環境との統合では、Gitによる管理方法にも新たな課題や視点が必要であることを学びました。本記事では、同様の問題に遭遇した場合の参考として、原因・解決策・対処手順を整理しました。

---

## 発生した問題

- Obsidianに「Smart Composer」プラグインを導入し、Vault chatを利用した際、`.smtcmp_vector_db.tar.gz`という約300MBのインデックスファイルが生成された。
- このファイルがGitHubのファイルサイズ制限（1ファイルあたり100MB）を超えたため、`git push`が失敗した。

```
remote: error: File .smtcmp_vector_db.tar.gz is 386.97 MB; this exceeds GitHub's file size limit of 100.00 MB
```

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/184128/e615802c-ba10-4a5e-9fbc-5dec1af3db7b.png" width=50%>

---

## 解決手順

### ① 大容量ファイルを`.gitignore`に追加

まず、今後この大容量ファイルがGitの追跡対象とならないよう、`.gitignore`に追加します。

```bash
echo ".smtcmp_vector_db*.tar.gz" >> .gitignore
git add .gitignore
git commit -m "Add .smtcmp_vector_db*.tar.gz to .gitignore"
```

:::note
念を入れて
.smtcmp_vector_db*.tar.gz
にしています。効果あるといいんだけど……
:::

### ② ローカルのGit管理対象から削除

既に追跡されている大容量ファイルをGitの管理対象から外します。

```bash
git rm --cached .smtcmp_vector_db.tar.gz
git commit -m "Remove .smtcmp_vector_db.tar.gz from Git tracking"
```

### ③ Git履歴から完全にファイルを削除

過去のコミット履歴からも大容量ファイルを削除する必要があります。

```bash
pip install git-filter-repo
git filter-repo --path .smtcmp_vector_db.tar.gz --invert-paths --force
```
:::note
`pip install git-filter-repo` するにあたって、仮想環境は使いませんでした
:::

※この操作でリモート設定が削除されるため、再設定が必要です。

#### 再びプロンプトが出た場合

以下のプロンプトが出たら、`N`を入力します。

```bash
Treat this run as a continuation of filtering in the previous run (Y/N)?
```

- 理由：以前の履歴を引き継ぐ必要がないため、履歴を完全に新しく生成します。


### ④ リモート（origin）を再設定

```bash
git remote add origin git@github.com:xxxx/yyyy.git
```

### ⑤ 強制的にリモートにpush

リモートリポジトリを上書きする形でpushします。

```bash
git push --set-upstream origin main --force
```

### ⑥ 最終的な同期確認

```bash
git pull
# Already up to date. となれば完了
```

---

## 環境

- Obsidian v1.8.9
- macOS Sequoia 15.2
- MacBook Pro (14-inch, 2021)

---

## 参考リンク

- [glowingjade/obsidian-smart-composer - GitHub](https://github.com/glowingjade/obsidian-smart-composer)
- [Vinzent03/obsidian-git - GitHub](https://github.com/Vinzent03/obsidian-git)
- [GitHubで大きなファイルをプッシュしてしまったときの対処法](https://lifetechia.com/git-large-file/)
- [GitHub Docs: 大きなファイルを管理する](https://docs.github.com/ja/repositories/working-with-files/managing-large-files)
- [GitHub Docs: Git Large File Storageについて](https://docs.github.com/ja/repositories/working-with-files/managing-large-files/about-git-large-file-storage)

:::note
この記事は [📘Obsidian Smart Composerの巨大ファイルをGit履歴から削除 - mxt forest](https://silme.zelo-loop.com/mxt/%F0%9F%93%92%E8%A8%98%E4%BA%8B-Tech/%F0%9F%93%98Obsidian+Smart+Composer%E3%81%AE%E5%B7%A8%E5%A4%A7%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%82%92Git%E5%B1%A5%E6%AD%B4%E3%81%8B%E3%82%89%E5%89%8A%E9%99%A4) に基づいています。最新の情報や更新は、元の記事でご確認ください。
:::

---

## おわりに

Obsidianにおける（ローカル）LLMの活用は、将来的に大きな可能性を秘めています。ただし、従来のMarkdownを中心とした軽量ファイル管理とは異なり、大容量のインデックスファイルやデータベースファイルが生成されるケースがあります。こうした問題に対処するためには、Git LFSのような新しい仕組みや管理方針を採用することが必要になりそうです。

本記事が同じ問題に直面した方の助けになれば幸いです。