Git・GitHubでバージョン管理する方法

# Git・GitHubでバージョン管理する事前準備の手順

- Git・GitHubでバージョン管理するための手順について、注意点も含めて記事にまとめておきます。



## Git管理下に置くための事前準備の手順

- 以下に手順を記述していきます。

### `GitHub`で新しいリポジトリ(任意の名前)を作成する

1. Githubにログインしてマイページに進み`repositories`メニューに進む
1. `New`ボタンから、リポジトリ新規作成画面`Create a new repository`に進む
1. `Repository name`の箇所に`（任意のリポジトリ名）`を入力する
1. `Add README.md`にチェックして、READMEを自動生成させる。（※後に、mainブランチの作成などを勝手に行ってくれるので便利）
1. その他の設定は特にいじらなくてもOK(外部公開したくない場合は`private`を選択)
1. `Create repository`ボタンでリポジトリ作成完了



### 作成したリモートリポジトリを任意のディレクトリ直下に`git clone`する

1. Githubで作成したリポジトリをGit管理するために、まずはcloneしてローカルに落としていきます。
1. Githubで作成したリポジトリの画面にて、`Quick setup — if you’ve done this kind of thing before`という項目にある、`SSH`ボタンを選択します。
1. おそらく`git@github.com~~`から始まるユーザー名・リポジトリ名が記載されたコードが表示されるので、そのコードをコピーします。
1. 次に、以下のコマンドを順番に実行することで自身のPCローカルリポジトリにcloneしてくることができます。



```
$ cd クローンしたいディレクトリ名
$ git clone git@github.com:[ユーザー名]/[リポジトリ名].git
$ cd リポジトリ名
```

※ `git clone` はGithubからクローンするGitコマンドです。
※ クローンしたら`cd`コマンドで対象のディレクトリに移動します。
※ `git init` はGitコマンドの一つで、新たにリポジトリを作成するときに使います。これは、リモートリポジトリではなく、ローカルリポジトリを先に作成するときにおそらく使うコマンド、、、なのかな？
※ 普段、自分はGitHub上でリモートリポジトリから先に作成してcloneするという手順をとっているので、この`git init`コマンドはあまり使ったことがない。
※ `git init`コマンドを実行すると、現在のディレクトリに`.git`というディレクトリが作成され、その中にGitのリポジトリに必要なデータ構造が作られます。
※ つまり、`git init`を実行することで、このリポジトリがGit管理となることを意味します。

なお、`git clone`をした段階で、以下のようなファイルが構成されました。

`$ tree -a`コマンドを実行
```
.
├── .DS_Store
└── .git
    ├── HEAD
    ├── config
    ├── description
    ├── hooks
    │   ├── applypatch-msg.sample
    │   ├── commit-msg.sample
    │   ├── fsmonitor-watchman.sample
    │   ├── post-update.sample
    │   ├── pre-applypatch.sample
    │   ├── pre-commit.sample
    │   ├── pre-merge-commit.sample
    │   ├── pre-push.sample
    │   ├── pre-rebase.sample
    │   ├── pre-receive.sample
    │   ├── prepare-commit-msg.sample
    │   ├── push-to-checkout.sample
    │   └── update.sample
    ├── info
    │   └── exclude
    ├── objects
    │   ├── info
    │   └── pack
    └── refs
        ├── .DS_Store
        ├── heads
        └── tags
```

※ 今回、私の場合は、`$ git init`を実行した際、このような表示が出ました。

```
Reinitialized existing Git repository in /***/*****/dotfiles/.git/
```
`リポジトリを再初期化した`という意味のようで、ドキッとしましたが、特にファイルの中身が変わった様子ではなかったです。`git clone`した時点で初期化は済んでいて、`git init`は今回は不要だったのかな、、、？





## 【注意】空のディレクトリはコミット・プッシュできない
空のディレクトリはコミット・プッシュできない
なので、隠しファイルで`.gitkeep`ファイルを作っておく。
今回は簡単に.gitkeepファイルを各種フォルダに作っておいた。
`git status -u`で確認してみると、、、、

```terminal
$ git status -u
On branch create_site
Your branch is up to date with 'origin/create_site'.

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	assets/css/.gitkeep
	assets/images/.gitkeep
	assets/js/.gitkeep
	assets/videos/.gitkeep
 ```
 
- これで、空のフォルダでもGit管理、コミット・プッシュができるようになる。
- これをなしにしてしまうと、、git pull origin mainした時に、空のフォルダが反映されず、、、。
- ローカルにマージされてしまう可能性があるので注意。
- 上記対応を行ったので、再度コミットしておく。
- 他にもコミットから除外するファイルを指定する`.gitignore`ファイルも作成しておきます。


```terminal
開発用ブランチを作成
$ git checkout -b dev
コミットに反映させたくないファイル指定する.gitignoreファイルを作成
$ touch .gitignore
$コミットから除外するファイル名を記述
```

```ruby
# ~/.ignore

# Mac
.DS_Store
```


```terminal
$ git add .
$ git status
$ git commit -m "【Add】空のフォルダにgitkeepを追加"
$ git push
$ git log
$ プルリクエスト〜マージ
$ git checkout main
$ git branch
$ git pull origin main
```