Gitで歴史から不要ファイルを削除してリポジトリを軽くする
ログファイルなど不要なファイルを歴史から抹消して,リポジトリを軽くする.
カテゴリ: tips
2018-04-21 17:28:57
参考: https://easyramble.com/git-filter-branch.html
## 歴史から削除
ブランチごとに,要らないファイルを消していく.
+ ファイルの場合
```
$ git filter-branch -f --index-filter 'git rm --ignore-unmatch [filename]' HEAD
```
+ ディレクトリの場合
```
$ git filter-branch -f --index-filter 'git rm -rf --ignore-unmatch dirname' HEAD
```
## 歴史の掃除
上記だけでは消えない.全ての歴史を抹消する.ただし,以下のコマンドは復元できないので,必ずバックアップ等をとるように.
```
$ git for-each-ref –format=’delete %(refname)’ refs/original | git update-ref –stdin
$ git reflog expire –expire=now –all
$ git gc –prune=now --aggressive
```
## さらに掃除
実は,これでもまだ不十分.
きれいにしたリポジトリを一旦まったく新しいリモートに上げて,再びクローンする.新しいリモートはローカルなりなんなりに適当に立てる.
```
$ mkdir ~/tmp-git-repo.git
$ cd ~/tmp-git-repo.git
$ git init --bare
$ cd [path to the repository]
$ git remote add tmp ~/tmp-git-repo.git
$ git push -u tmp --all
$ mkdir ~/new-repo
$ cd ~/new-repo
$ git clone ~/tmp-git-repo.git
```
## 感想
初めから不要なファイルは入れないようにしましょう.