0からではないGit＆GitHubをつなげるときに大変だったこと

# Introduction

## きっかけ
[webサービス](https://www.slideshare.net/satoshiyamada71697/bottlepy)を作りながら、フロントサイドとサーバーサイドをいじっていると、どこを修正したのか忘れて混乱し始めました。だから以前[Heroku+linebotのとき](https://qiita.com/Senple/items/ece50a1fb29c748bd3ab)に(半ば強制的に)使っていたgitというものを、本格的に使いたいと考えました。どうせならきちんとしたエンジニアらしくポートフォリオを充実させられるようにGitHubとも連携しながら管理していこうと思いました。
自己紹介→[いつものやつ](https://qiita.com/Senple/items/b47374e68e4d8d26d0cb)

Cf.) [GitとGitHubって何が違うの?](https://blog.codecamp.jp/git-github)
>・Gitとは？
Git（ギット）とは、バージョン管理を行うためのツールのことです。複数人でプログラミングを行う場合、ソースコードを効率的に管理・運用する必要があります。例えば、「誰がどのファイルのどの部分を修正したのか？」や「リリース予定の機能追加で更新するのは、どれとどれか？」といったことです。Gitはこのような管理を行うためにつくられたツールで、システム開発の現場では一般的に使われているツールの一つです。

>・GitHubとは？
Gitでは、リモートリポジトリとローカルリポジトリを使い分けて開発を行います。GitHub（ギットハブ）とは、このリモートにあたる部分を提供しているサービスのことです。複数人での開発をサポートしてくれる便利機能が備わっていて、現在ではエンジニアにとって欠かせないツールの一つになりました。料金については、容量に応じて利用料が決まる仕組みになっています。プライベート（非公開）リポジトリを利用したい場合は、有料プランに登録する必要があります。


## 問題点
しかし自分のパソコンは借り物なので、もともとGit BashやらGit CMDやらGit GUIといった多種多様なgitの管理ツールが入っています。それぞれがどんなものかさっぱりわからないですし、一からのGitデビューでないといった事情から、Googleで調べて出てくる[Gitの簡単な始め方といったサイト](http://www.atmarkit.co.jp/ait/articles/1603/31/news026.html)*が参考にならなかったので、備忘録としてまとめておきます。

題して「**知識はないのに、ゼロからできないGit初心者のためのGitHubデビュー**」

*「ゼロから始めるGit初心者」の方々には参考になる(と思われる)ので、一応貼っておきます。
### 対象者
・すでにGitHubのアカウントを持っている人(持っていない方はこちらなどを参考に作ってください)
・すでにGitが入っているが、どうやって使えばいいのかわからない人
・SSHとか深い話はさっぱり分からない人
・とりあえず管理されたい束縛好きエンジニア
・**Windows**の人
### 非対象者
・一からGitをインストールする人
・インフラ系が超お得意な人
・インフラ系を理解しようとしている人
・自分で自己管理できるエンジニア
・**Mac**の人


# Let's Start
この[サイト](https://qiita.com/ishiitakeru/items/3e445c1234a205396a37)にお世話になりました。
上記のサイトを軸にわからないとこなどで適宜調べたもの、エラー対処などをまとめておきます。
それでは張り切ってまいりましょう。

### 1、自分の情報を登録しよう。
早速ですが、すみません。
ユーザー名やパスワードは前にgitデビューを挫折した時に登録済みだったため、pass

### 2、ローカルをGitで管理しよう！
Pythonのコードなどではなく、コマンドライン上の処理を記述する際には~~いい方法が思い浮かばないため~~以下のような記述様式を使用します。

```
$ cd 作業用ディレクリ
$ git init
```
これで管理開始です。作業用ディレクトリにGitの監視を付けることに成功！
次に初期データをGitに教えます。Gitはバージョン管理システムなので、スタートの状態を知る必要があります。最初はどんなデータなのかを教えてあげましょう。

```
$ git add -A
```
Gitで管理しようとすると

```
warning: LF will be replaced by CRLF in chat.py.
The file will have its original line endings in your working directory.
```
なんだか怖いエラーが出たので、Google先生！
[こんな感じ](https://normalblog.net/system/lf_replaced_crlf/)で改行の問題らしいので、

```
$ git config --global core.autoCRLF false
```
自動変換プロパティ？をオフにします。
ちなみに作業用ディレクトリにgitファイルが登場しないときはディレクリのプロパティをいじっているとなぜか表示されたので、ご参考までに…
詳細については時間があったら調べます。~~(多分調べない)~~

### 3、GitHubとローカルをつなげよう！
リモートとローカルをつなげる際に記事上では、
**WindowsコマンドラインからGitで使うSSHキー作成**
となっていますが、自分の場合は「keygen.exe」が複数見つかったので、どれを動かせばいいのかわからず…そこで別の手法を探して[こちら](
http://monsat.hatenablog.com/entry/generating-ssh-keys-for-github)を参考にしました。

Cf.) [Git Bashとコマンドプロンプトのコマンドはけっこう違う](https://teratail.com/questions/78349)
>Git Bashの貼り付けコマンドは「Ctrl + V」ではなく、「Shift + Ins」です。

Git Bashに

```
$ ls ~/.ssh
>id_rsa      id_rsa.pub
```
の通りにls ~/.sshと入力すると二つが出てきたので、次の項目
**秘密鍵・公開鍵のペアを生成する**
の欄を飛ばしました。しかしのちに自分のアカウントによる秘密鍵・公開鍵ではないことが判明したので、おとなしく改めて生成しなおしました。
皆さんも気をつけてください！

メールアドレスはよくわからないので、Githubや「1,自分の情報を登録しよう。」で入力したGitのメールアドレスを入力しました。

`$ ssh-keygen -t rsa -C "自分のメールアドレス"`

>
実行すると以下の3つの入力を求められますが、すべて Enter(return) で実用上構いません。
>>鍵ファイルを保存するフォルダ
パスフレーズ
パスフレーズ（確認用）

>もしパスフレーズを設定した場合は以下のコマンドを実行し、パスフレーズの入力を省略する設定が可能です。
`$ ssh-add ~/.ssh/id_rsa`

ここも、まぁ書いてある通り~~(英語読めないので)~~すべてEnterキー押してました。
そしてGitHubと連携します。
Windows(Git Bash)の場合
`$ clip < ~/.ssh/id_rsa.pub`
コピーしたらGithubで公開鍵登録したり、試しに接続してみてください。
自分も案の定下記のメッセージが出てきたので、yesと入力しました。

>
以上で終了ですが
初回のみ相手のサーバーを確認する作業がありますので、いちど試しに接続してみるとよいでしょう。
`$ ssh -T git@github.com`
>つぎのように表示されたら、落ち着いて yes と入力してください

>```
The authenticity of host 'github.com (207.97.227.239)' can't be established.
RSA key fingerprint is 16:27:ac:a5:76:28:2d:36:63:1b:56:4d:eb:df:a6:48.
Are you sure you want to continue connecting (yes/no)?
```
接続に成功すると、つぎのようなメッセージになるはずです
>Hi *username!* You've successfully authenticated, but GitHub does not
provide shell access.

### 4、リモートレポジトリを作成して、ローカルとつなげよう！
もう一度[こちら](https://qiita.com/ishiitakeru/items/3e445c1234a205396a37)に戻って
**リモートレポジトリへプッシュ**
の項目を落ち着いて作業しましょう。
ゴールはすぐそこです。
>
GitHubの画面からリポジトリを新規作成。
ローカルレポジトリのディレクトリに移動。今回はRailsのチュートリアルで勉強中なので作成中のRailsサンプルアプリの場所。「.git」や「Gemfile」があるディレクトリ。
ローカルリポジトリにリモートリポジトリを追加する。cloneしてくるときと同様の「origin」というリモート名にしておく。
`$ git remote add origin (GitHubのリポジトリのアドレス)`
リモートからフェッチする
`$ git fetch origin`
**<追記(20180914)>**
自分で試したところエラーが出てきました。
`src refspec master does not match any.`
Google先生に聞いたら[このURL](https://qiita.com/tesoro/items/af4a80b7ebb9ad34e5fd)見ろ！って出てきました。
簡単に紹介するとプッシュする際には、いつもどおり
`git add -A`
`git commit -m "first commit"`
をしたのちに以下のgit pushをしてください！
**<追記終わり>**
>リモートにはまだ何もないので、まずはローカルレポジトリをまるっとプッシュする。「-f」オプションを付けて強制プッシュ。
`$ git push -f origin master`


mission complete!
これでローカルとリモートがつながって、なおかつGitHubにも変更履歴が乗るので、エンジニアとしてのパスポートをゲットしたも同然です♪


### 5、その他の処理
本筋とは関係ありませんが、いくつか処理を加えたのでそれも追記しておきます。
・git push の際のユーザー名・パスワードの入力
・gitignoreでcsvファイルを隠したい
・GitHubからガチめに怒られた？話


#### ・git push の際のユーザー名・パスワードの入力
毎回git pushするときにユーザーネームとパスワードが聞かれてうっとうしいので、パスワードを入れなくていいように設定を変更しました。[ここ](https://qiita.com/rorensu2236/items/df7d4c2cf621eeddd468)を参考にして、http通信からSSH通信に変更しました。

```
$ git remote -v
$ git remote set-url --push origin git@github.com:自分のディレクトリ
```

で、pushの部分だけ、SSH通信になりました。
fetchのほうは今のところ困ってないので、http通信のままです。
理由はわからないので、今度調べます。~~(多分調べない)~~

pushをSSH通信にしたところ、warningが出てきたので、[こんな感じ](https://qiita.com/tdrk/items/a0554763c29f60e347b5)で対応しました。SSHのことはわからないので、書かれているままにコードを打ち込んだところwarningが消えたので、追記しておきます。


#### ・gitignoreでcsvファイルを消したい
gitignore自体は「2,ローカルをGitで管理しよう！」で作られていたので、open with Atomで開いて、[この記事](https://qiita.com/inabe49/items/16ee3d9d1ce68daa9fff)の**特定の拡張子を無視する**を参考に、

```
# csv ファイルは要らない
*.csv
```
を追記しました。それだけだと、変更が反映されませんでした。
調べてみると、すでにgitにあげたものに対してgitignoreしてもキャッシュが残っているらしく、変更を反映してくれないそうです。そこで[こちらの記事](https://qiita.com/fuwamaki/items/3ed021163e50beab7154)の通りに、一度すべてのファイルのキャッシュを削除して

```
git add -A
git commit -m "cached delete"
git push origin master
```
をやりなおしました。
ちなみに…

```
git commit -m "コメント"
```
このコマンドの -m には、コメントを残すコマンドらしいです。
気になる人は調べてみてください。~~そして教えてください。~~
(まぁだからコメントは"git create"じゃなくてもいいのよね…)

#### ・GitHubからガチめに怒られた？話
**3,Githubとローカルをつなげよう！**の際に、GitHubのアカウント情報に公開鍵を設定するわけですが、その際にGitHubから以下のようなメッセージが出てきました。
>
「Your GitHub password has been reported as compromised in a data breach by "HaveIBeenPwned™". Although passwords may be reused across services, GitHub passwords have not been compromised directly. Please update your password as soon as possible.」
(意訳)
「君のパスワードは想像しやすいんだよ～危険だからぜひ変えるべきだよ。さぁ速やかに変えるんだ♪」
>

だと思われるので、おとなしくパスワード変えました。これが出てきたときは、正直にいうと怖かったです。はい…
~~違う場合やこういった問題に詳しい人教えてください~~

## 追記
~~自分用メモ~~
### gitコマンドでダウンロードしたい(2019/02/06)

```
git clone "URL"
```
の形で"URL"のところにダウンロードしたいレポジトリのURLをコピペすると、ローカルにレポジトリをダウンロードすることができる。
ダウンロード出来たら、任意のディレクトリへGUI上で操作…
コマンドライン？の知識は皆無なので、間違っている？というかアドバイスレベルでもいいので、教えてください。

## その他参照サイト
・Gitのコマンド
https://normalblog.net/system/gitmatome/
・SSHの概念的なもの？(15秒でざっと知りたかった)
https://www.idcf.jp/words/ssh.html