IntelliJ IDEAとGitHubを連携するときの設定メモ

# 概要

IntelliJ IDEAとGitHubを連携するときの設定メモです。

**環境**

下記の環境で動作確認を行いました。

* Windows7 (64bit)
* IntelliJ IDEA Community Edition 14.1.4
* Git for Windows 2.5.1

**参考**

* [IntelliJ IDEA 14.1.0 Help] (https://www.jetbrains.com/idea/help/intellij-idea.html)


## 設定

IntelliJ IDEAのWelcome画面下のConfigureをクリックしメニューからSettingsを選択します。
この設定は1回だけ行います。

### 改行コードの設定

`左メニュー -> Editor -> Code Style`

改行コードをLFに設定します。
Lien separator (for new line):に"Unix and OS X(\n)"を選択します。

![i12.png](https://qiita-image-store.s3.amazonaws.com/0/22772/ebf28e06-7c09-867c-114b-0e6d45c3beec.png)

### Master passwordの設定

master passwordを使用する設定にしておくと、外部サービスのパスワードを保存する必要がある場合(今回の場合はGitHubのアカウントパスワード)、事前に登録しておいたmaster passwordで保護し、外部サービスのパスワードが必要になったときにmaster passwordで認証しなければそのパスワードが参照できないようになります。

`左メニュー -> Appearance & Behavior -> System Settings -> Passwords`

Password storage policyに"Save on disk with master password protection"を選択しDisk storage protectionのMaster Passwordボタンをクリックします。

![i15.png](https://qiita-image-store.s3.amazonaws.com/0/22772/86f2770f-1460-d8ec-d004-da87b0233294.png)

master passwordを入力しOKボタンをクリックします。

![i16.png](https://qiita-image-store.s3.amazonaws.com/0/22772/fe025894-d8c2-6eb3-56d9-bd327bf5feb7.png)


### Git/GitHubプラグインの確認

`左メニュー -> Plugins`

デフォルトで有効になっていると思いますが念のためGit Integration, GitHubが有効になっていることを確認します。

![i01.png](https://qiita-image-store.s3.amazonaws.com/0/22772/bad3b9d1-04f7-17c5-35ce-f6e67846146f.png)


### GitHubのアクセストークンの作成

`左メニュー -> Version Control -> GitHub`

GitHubにアクセスする際に必要になるアクセストークンを作成します。
Hostが"github.com"になっていることを確認し、AuthTypeに"Token"を選択してCreate API Tokenボタンをクリックします。

![i02.png](https://qiita-image-store.s3.amazonaws.com/0/22772/c171d45f-f3a3-82cf-a732-0fa1711d729d.png)

Login to GitHub画面でGitHubのアカウントとパスワードを入力しLoginボタンをクリックします。

![i03.png](https://qiita-image-store.s3.amazonaws.com/0/22772/bc8c958a-123a-360b-1e3f-28892424ef96.png)

認証に成功するとトークンが生成されます。
次にTestボタンをクリックして確認します。

![i04.png](https://qiita-image-store.s3.amazonaws.com/0/22772/b8e56462-8ca8-71bf-7a3a-ae1d8472ebe2.png)

トークンによる認証が成功するとSuccess画面が表示されます。

![i05.png](https://qiita-image-store.s3.amazonaws.com/0/22772/b1891c64-afba-5ef7-89ae-9efd6b13093d.png)

画面下のOKボタンをクリックするとmaster passwordの入力を求められるのでパスワードを入力してOKボタンをクリックします。
(前後の操作のタイミングのせいか求められないときもありました。)

![i06.png](https://qiita-image-store.s3.amazonaws.com/0/22772/f7ee31de-743a-9dfa-3f39-7ae1e52c5400.png)


次にGitHub側でPersonal Access Tokenが登録されていることを確認するためGitHubのSettingsページにアクセスします。
Personal SettingsメニューのPersonal Access Tokensをクリックして"IntelliJ Plugin"という名前のトークンが登録されていることを確認します。

![i07.png](https://qiita-image-store.s3.amazonaws.com/0/22772/47fa4aa7-d1ac-2917-94e5-2dcfe2b356dc.png)


### Gitの確認

`左メニュー -> Version Control -> Git`

Path to Git executable:にgit.exeのパスが設定されていることを確認します。
次に右のTestボタンをクリックして確認します。

![i08.png](https://qiita-image-store.s3.amazonaws.com/0/22772/c5d5eacd-7577-8ca5-626a-d05c05369628.png)

成功すると下図の結果になります。

![i09.png](https://qiita-image-store.s3.amazonaws.com/0/22772/a4c1009f-1e11-ecfd-e3eb-fac20f1c89ff.png)


## プロジェクトの作成

### プロジェクトを作成する

Welcome画面のCreate New Projectをクリックしてプロジェクトを作成します。
プロジェクト名は"gokit-example"としました。

### ファイルを追加

プロジェクトのルートディレクトリ直下に下記のファイルを作成します。

.gitignoreを作成します。

```text:gitignore
/.idea/
/tmp/
/bin/
*.test
*.swp
```

README.mdを作成します。

```text
# 概要

IntelliJ IDEAとGitHubの連携
```

main.goを作成します。

```go:main.go
package main
import "fmt"

func main() {
    fmt.Println("Hello World!")
}
```

### ローカルリポジトリの作成

`メニューバー -> VCS -> "Enable Version Control Integration..."`

Enable Version Control Integration画面で"Select a version control system to associate with the project root:"にGitを選択してOKボタンをクリックします。

![i10.png](https://qiita-image-store.s3.amazonaws.com/0/22772/e80fc6f2-a83c-375e-cd90-719149672597.png)

これでプロジェクトがGitリポジトリとして初期化されました。


#### configの修正

Windowsのエクスプローラーからプロジェクトディレクトリ下の.git/configファイル探しテキストエディターで修正します。
コミット、チェックアウト時に改行コードの変換が行われないように[core]ディレクティブに下記の行を追加します。

```text
autocrlf = false
```

#### 作成したファイルをadd

プロジェクト名を右クリックしコンテキストメニューからGit -> Addを選択します。

#### first commit

プロジェクト名を右クリックしコンテキストメニューからGit -> Commit Directory...を選択します。
コミットメッセージに"first commit"と入力しCommitボタンをクリックします。
(commitと同時にpushまで出来ますが今回はローカルリポジトリにcommitのみ行います。)

![i11.png](https://qiita-image-store.s3.amazonaws.com/0/22772/0a8dbb90-8e6d-af1e-b8f5-c174529e4cc8.png)


## リモートリポジトリの作成

GitHubページ上でリモートリポジトリを作成します。
リモートリポジトリ名を"rubytomato/gokit-example"としました。

![i13.png](https://qiita-image-store.s3.amazonaws.com/0/22772/f57be0c9-b39c-df36-c733-08b37634712a.png)


## リモートリポジトリの追加

ここはIntelliJ IDEAではなくGit for WindowsのGit Bashで行います。
プロジェクトディレクトリを右クリックしコンテキストメニューからGit Bash Hereを選択します。

コンソールが起動したら下記のコマンドを実行してローカルリポジトリにリモートリポジトリを追加します。

```bash
$ git remote add origin git@github.com:rubytomato/gokit-example.git
```

ローカルリポジトリの内容をリモートリポジトリへ反映させます。

```bash
$ git push -u origin master
Counting objects: 8, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (8/8), 885 bytes | 0 bytes/s, done.
Total 8 (delta 0), reused 0 (delta 0)
To git@github.com:rubytomato/gokit-example.git
 * [new branch]      master -> master
Branch master set up to track remote branch master from origin.
```


## 操作の確認

プロジェクトディレクトリ下に新しいファイルを追加しリモートリポジトリへ反映させるところまでの操作を確認します。

### 新しいファイルを追加

app.goという名前のファイルを追加します。
ダイアログウィンドウが表示されますのでYesをクリックします。(確認画面が不要な場合は"Remember, don't ask again"にチェックを入れます。)

![i14.png](https://qiita-image-store.s3.amazonaws.com/0/22772/a5164935-a879-08cb-f023-5d5fa6e62bb6.png)

下記のようにファイルを編集します。

```go:app.go
package main
import "fmt"

func app() {
    fmt.Println("app")
}
```

ファイルを編集したのでもう一度addを行います。
追加したファイルをコンテキストメニューからGit -> Addをクリックします。(もしくは<kbd>Ctrl</kbd> + <kbd>Alt</kbd> + <kbd>A</kbd>)


### コミット

プロジェクト名を右クリックしてコンテキストメニューからGit -> Commit Directory... -> Commit Changesでコミットメッセージを入力してCommitボタンをクリックします。
すると下図のダイアログが表示されるのでReviewボタンをクリックして確認します。

![i17.png](https://qiita-image-store.s3.amazonaws.com/0/22772/666ac7f8-0ca2-da56-3494-594bfda33b02.png)

Code Analysisには"Unused function 'app'"というメッセージが表示されており、appというファンクションが未使用ということがわかります。
今回はこのメッセージは無視してこのままコミットします。

![i18.png](https://qiita-image-store.s3.amazonaws.com/0/22772/38bdd2a7-f74d-f9c5-341e-3c6581498dd6.png)


### リモートリポジトリへプッシュ

プロジェクト名を右クリックしてコンテキストメニューからGit -> Repository -> Push... (もしくは<kbd>Ctrl</kbd> + <kbd>Shift</kbd> + <kbd>K</kbd>) -> Push CommitsでPushボタンをクリックします。

![i19.png](https://qiita-image-store.s3.amazonaws.com/0/22772/236c719d-70ba-2eb1-9406-30820483aaa6.png)

GitHubのリポジトリページにアクセスしてコミットした内容が反映されていることを確認します。
この記事の内容は以上になります。



## メモ

### プラグイン

必須ではありませんが、入れておくと便利なプラグインです。

#### ignore

https://plugins.jetbrains.com/plugin/7495?pr=idea

.gitignoreファイルを開くとエディタの右上に"Install plugins"というリンクが表示されているのでクリックします。
Choose plugins to Install or Enable画面が表示されるのでOKボタンをクリックします。

![i20.png](https://qiita-image-store.s3.amazonaws.com/0/22772/ddbd2d3e-5b39-c5e1-2071-abc66baa05ef.png)

対象がディレクトリの場合は左側にフォルダーアイコンが表示されたり、使用されていない(対象となるファイルが無い)場合は表示がグレーアウトになります。

![i22.png](https://qiita-image-store.s3.amazonaws.com/0/22772/2d1c11bb-604f-3d2d-c81c-dc33231b2da4.png)

#### markdown

https://plugins.jetbrains.com/plugin/5970?pr=idea

README.mdファイルを開くとエディタの右上に"Install plugins"というリンクが表示されているのでクリックします。
Choose plugins to Install or Enable画面が表示されるのでMarkdownにのみチェックを入れてOKボタンをクリックします。

![i21.png](https://qiita-image-store.s3.amazonaws.com/0/22772/d6c6a072-9b34-c127-cc1f-dcc17efb6157.png)

プレビュータブが追加されます。

![i23.png](https://qiita-image-store.s3.amazonaws.com/0/22772/2f54229f-402b-2a31-8212-b16cd67c35db.png)

![i24.png](https://qiita-image-store.s3.amazonaws.com/0/22772/68ad3e67-69c7-305e-68b5-fcf69803491c.png)