Gitでcommitやpushを忘れることありませんか？git-remindはそういう｢忘れ｣を防ぐためのツールです

うっかりGitのコミットやプッシュを忘れてしまうことはないだろうか？ [git-remind]はそんな(僕のような)忘れっぽい人のためのツールで、Gitリポジトリの状態を監視して、git commitやgit pushがなされていないリポジトリを見つけ教えてくれる。

[git-remind]: https://github.com/suin/git-remind

## 主な機能

### git commit/git pushしてないリポジトリの一覧機能

複数のGitプロジェクトを横断して、コミットされていないファイルがあるリポジトリや、コミットはされているけどgit pushがまだされていないリポジトリを見つけ出して一覧にしてくれる。

<img width="437" alt="demo-git-remind-status.png" src="https://qiita-image-store.s3.amazonaws.com/0/889/3c6eefe0-549e-5bef-65cc-1109d01d87b5.png">

### デスクトップ通知

未コミット、未プッシュのリポジトリを一覧できる他に、それらのリポジトリがあればデスクトップ通知で教えてくれる機能もある。macOSの場合、通知センターに表示される。試したのはmacOSだけだが、git-remindの内部実装としては[gen2brain/beeep](https://github.com/gen2brain/beeep)というクロスプラットフォームのデスクトップ通知ライブラリを使っているので、macOSに限らずWindowsやLinuxでも通知が受け取れると思われる。

<img width="383" alt="demo-notification.png" src="https://qiita-image-store.s3.amazonaws.com/0/889/a9a599f1-5f89-cb3a-ac47-be30b1fbeb5b.png">

## インストール方法

### Homebrewでインストールする方法

macOSならHomebrewでインストールするのが手軽だ。

```
brew install suin/suin/git-remind
```

Windows向けやLinux向けには、[releases](https://github.com/suin/git-remind/releases)にてビルド済みバイナリが公開されているのでダウンロードして使う。

## 設定手順

コミット忘れをチェックしたいGitリポジトリは、`~/.gitconfig`にて絶対パスで指定する。

```text:.gitconfig
[remind]
	paths = /Users/you/projects/foo,/Users/you/projects/bar
```

なお、同じディレクトリに複数Gitリポジトリがある場合は、ワイルドカードを使うこともできる。例えば、`~/projects/foo`と`~/projects/bar`を監視したい場合、`/Users/you/projects/*`のようにまとめて指定することができる。

```text:.gitconfig
[remind]
	paths = /Users/you/projects/*
```

`~/.gitconfig`に設定を書いたら下記コマンドで設定を確認する。

```bash
git-remind paths # .gitconfigに書かれたパスを復唱するコマンド
git-remind repos # 監視対象のリポジトリ一覧を表示するコマンド
```

## 使い方

### コミット/プッシュの状態を表示する

`git-remind status`コマンドを叩くと、コミットやプッシュがされていないリポジトリの一覧を見ることができる。

```
$ git-remind status
Need to commit: /Users/suin/projects/myapp1
Need to commit and push: /Users/suin/projects/myapp2
```

#### `git status -s`風の短めの表示

`git remind status`に`-s`オプションを付けると短めのステータス表示が出る。

```
$ git-remind status -s
C  /Users/suin/projects/myapp1
CP /Users/suin/projects/myapp2
```

* C (Need to **C**ommit)... コミットが必要な状態
* P (Need to **P**ush)... プッシュが必要な状態
* U (**U**p-to-date) ... 最新(コミットもプッシュも不要)な状態

#### 全リポジトリの状態を表示する 

`git remind status`に`-a`オプションを付けると、コミットやプッシュが必要ないリポジトリも含めて、全リポジトリの状態が表示される。

```
$ git-remind status -a
Need to commit: /Users/suin/projects/myapp1
Need to commit and push: /Users/suin/projects/myapp2
Up-to-date: /Users/suin/projects/myapp3
```

### デスクトップ通知

下記コマンドを実行するとデスクトップ通知を上げることができる。

```
git-remind status-notification
```

## 応用的な使い方

### 定期的にデスクトップ通知を上げる (cron)

定期的にデスクトップ通知を受け取るにはcronと組み合わせる。下記の例は20分毎に通知を上げるcron設定:

```text:cron
PATH=/usr/local/bin:/usr/bin:/bin

*/20 * * * * git-remind status-notification > /dev/null 2>&1
```

### 未コミット/未プッシュがあるリポジトリにジャンプする

[fzf](https://github.com/junegunn/fzf)コマンドと組み合わせると、未コミット/未プッシュがあるリポジトリにジャンプできるようになり便利である。

```
cd $(git remind status -n | fzf)
```

![demo-fzf.gif](https://qiita-image-store.s3.amazonaws.com/0/889/3f96d523-1df1-d87d-69f4-d6e0c7595b5c.gif)

このコマンドを簡単に起動できるように.bashrcや.zshrcにエイリアスを定義しておくと良いだろう。

```bash
alias grj='cd $(git remind status -n | fzf)'
```

## 参考

* GitHub: [suin/git-remind: Never forget to git commit and push](https://github.com/suin/git-remind)