eclipseのプロジェクトをgithubのリポジトリーに登録する

# 概要

eclipseで作成したプロジェクトをgithubのリポジトリーに登録する手順のまとめです。

手順は下記の通りです。

1. アプリケーションの雛形を作成
1. 秘密鍵と公開鍵の作成
1. githubに公開鍵を登録
1. githubにリモートリポジトリーを作成
1. ローカルリポジトリーを作成
1. eclipseの設定
1. ローカルリポジトリーをeclipseに取り込む

**環境**

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

* Windows7 (64bit)
* Eclipse 4.4.2
 * EGit 4.0.1
* Git for Windows 1.9.5

**参考**

下記のサイトを参考にさせて頂きました。

* [初心者Git日記その五～GitHubにSSH公開鍵登録～] (http://design1.chu.jp/setucocms-pjt/?p=580)


## アプリケーションの雛形を作成

githubで管理するアプリケーションの雛形を作成します。
アプリケーション名は`sdn4rc2-example`にしました。

```bash:mvn
> mvn archetype:generate -DgroupId=com.example.sdn4rc2 -DartifactId=sdn4rc2-example -DarchetypeArtifactId=maven-archetype-quickstart -DinteractiveMode=false
```

```bash:eclipse
> cd  sdn4rc2-example
> mvn eclipse:eclipse
```


## 秘密鍵と公開鍵の作成

ssh-keygenコマンドで秘密鍵と公開鍵を作成します。すでに作成済みであればスキップします。
今回はgit bashのssh-keygenを使用して作成しました。
適当なフォルダ名(どこでも構いません)を右クリックしてコンテキストメニューから"Git Bash Here"を選びgit bashコンソールを開きます。

プロンプトから"ssh-keygen"コマンドを実行します。
"Enter file in which to save the key (...):"に、秘密鍵を置く場所とファイル名を入力します。
今回はそのままエンターキーを押してデフォルトの内容で作成しました。

```bash
$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/c/Users/Username/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /c/Users/Username/.ssh/id_rsa.
Your public key has been saved in /c/Users/Username/.ssh/id_rsa.pub.
The key fingerprint is:
xx:xx:xx:xx:xx:xx:xx:xx:x:xx:xx:xx:xx:xx:xx:xx Username@Localhost
The key's randomart image is:
+--[ RSA 2048]----+
|                 |
|   o             |
|  . o            |
|.  o .           |
|E   B   S        |
|.  * = .         |
|. o / o          |
| . * @           |
|    o .          |
+-----------------+
```

* 一部情報をマスクしています。

作成した鍵は下記の通りです。

秘密鍵: `c/Users/Username/.ssh/id_rsa`
公開鍵: `c/Users/Username/.ssh/id_rsa.pub`


## githubに公開鍵を登録

githubページにアクセスし下記の手順で公開鍵を登録します。登録済みであればスキップします。

* profileアイコンをクリックしメニューから"Settings"を選択します。
* Personal Settingsメニューの"SSH keys"を選択します。
* Add SSH keyボタンをクリックします。

Add an SSH keyのTitle欄に任意の文字列と、Key欄に作成した公開鍵の内容を入力します。

![add_an_ssh_key.png](https://qiita-image-store.s3.amazonaws.com/0/22772/ac356b06-dc42-4bc9-ddc1-88e5c235215f.png)

## githubにリモートリポジトリーを作成

続いてgithub上でリポジトリーを作成します。
リポジトリー名はアプリケーション名にあわせて`sdn4rc2-example`にしました。

![remote_repository.png](https://qiita-image-store.s3.amazonaws.com/0/22772/10cb9829-ae38-7332-57cb-a8cc35703f7c.png)

リポジトリー作成完了ページに下記のようなサンプルコマンドが表示されますので、このコマンドを使ってローカルリポジトリーを作成します。

```bash
echo # sdn4rc2-example >> README.md
git init
git add README.md
git commit -m "first commit"
git remote add origin git@github.com:rubytomato/sdn4rc2-example.git
git push -u origin master
```


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

今度はPC側で、Git Bashを使ってローカルリポジトリーを作成します。
プロジェクトフォルダ名を右クリックしコンテキストメニューから"Git Bash Here"を選択してgit bashコンソールを開きます。

プロジェクトフォルダの直下に.gitignoreを作成します。

```text:.gitignore
target/
bower_components/
node_modules/
notworkingyet/
deploy/
.buildpath
.project
.settings
.bin/
.idea/
.tmp/
*.class
*.iml
*.iws
*.ipr
*.db
.DS_Store
.classpath
bin
```

下記のgitコマンドを実行してローカルリポジトリーを作成します。

```bash:init
$ git init
Initialized empty Git repository in D:/dev/eclipse-jee-luna-SR2-workspace/sdn4rc2-example/.git/
```

```bash:add_pom.xml
$ git add pom.xml
```

```bash:add_src
$ git add src
```

```bash:add_gitignore
$ git add .gitignore
```

```bash:status
$ git status
On branch master

Initial commit

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)

        new file:   .gitignore
        new file:   pom.xml
        new file:   src/main/java/com/example/sdn4rc2/App.java
        new file:   src/test/java/com/example/sdn4rc2/AppTest.java
```

```bash:commit
$ git commit -m "first commit"
[master (root-commit) 52df9d1] first commit
 4 files changed, 88 insertions(+)
 create mode 100644 .gitignore
 create mode 100644 pom.xml
 create mode 100644 src/main/java/com/example/sdn4rc2/App.java
 create mode 100644 src/test/java/com/example/sdn4rc2/AppTest.java
```

リモートリポジトリーを登録してプッシュします。

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

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

ここまでできたらgithubのリポジトリーを見てコミットが反映されているか確認します。


## eclipseの設定

メニューの"Windows" -> "Preferences" -> "General" -> "Network Connections" -> "SSH2"を選択します。
Generalタブで"SSH2 home"と"Private keys"の値の場所に、作成した秘密鍵があるか確認します。

![eclipse-ssh2.png](https://qiita-image-store.s3.amazonaws.com/0/22772/fc91c95f-3ee2-9a2d-caac-713e9b6ccfcf.png)

## ローカルリポジトリーをeclipseに取り込む

"Git Repositories"パースペクティブを開き、"Add an existing local Git repository"ボタンをクリックします。
上記で作成したローカルリポジトリーの場所を選択します。


### ローカルリポジトリーをインポートする

"Java EE"パースペクティブを開き、Project Explorer上で右クリックし、"Import" -> "Import..." -> "Git" -> "Projects from Git"を選択します。
続いて"Existing local repository" -> "sdn4rc2-example" -> "Import existing Eclipse projects"を選択します。

インポートが終わったらプロジェクト名を右クリックして"Configure" -> "Convert to Maven Project"を選択します。

### ファイルを編集しコミットする

試しにpom.xmlファイルを編集してみます。

* pom.xmlファイルを編集するとファイル名の先頭に">"マークが付きます。
* pom.xmlファイルを右クリックして"Team" -> "Add to Index"を選択します。
* 続いてcommitするとプロジェクト名の右側に"[sdn4rc2-example master ↑1]"と表示されます。
* "Push to Upstream"を選択してリモートリポジトリーへ反映します。

githubのリポジトリーを確認してコミットが反映されていることを確認します。