【Mac,Win】宅内のNASをリモートリポジトリにしてforkアプリでgit操作する

#はじめに
とにかく簡単に宅内のNASにリモートリポジトリを作成してgit操作をしたかったので備忘録としてまとめます。
git操作は今回アプリを使用します。
アプリは「Sourcetree」、「fork」、「gitkraken」のアプリをmacにインストールしました。各アプリを何も調べずに操作したところ、NASに作成したリモートリポジトリについて、アプリからのプッシュ、クローン、コミットまで行えたのが、forkアプリだけだったので、「fork」アプリでのgit操作についてまとめます。

2020/02/10 追記
※「Sorcetree」、「gitkraken」でもNasに作成したリモートリポジトリからクローンが行えることを確認しました。gitの操作について理解不足が原因でした。

##環境
### mac環境
macOS Mojave バージョン 10.14.5
Fork バージョン 1.0.83.1


### windows環境
windows10
Forkバージョン 1.42.4.0

##目次
1. gitのインストール
2. NASにリモートリポジトリ(ベアリポジトリ)を作成する。
3. forkアプリをインストールする。
4. forkアプリでクローン(ローカルリポジトリ<ノンベアリポジトリ>を作成)する。
5. forkアプリでローカルリポジトリをコミットする。
6. forkアプリでNASに作成したリモートリポジトリにプッシュする。
7. forkアプリでリモートリポジトリをフェッチする。

## 1. gitのインストール
リモートリポジトリを作成するには先にpcにgitのインストールが必要です。
git操作アプリで色々試したのですが、ツール上からNASにリモートリポジトリの作成ができなかったので、以下を参考にterminalでgitをインストールし、リモートリポジトリを作成しました。

### macの場合
- 参考
 - https://yukiyuriweb.com/project-management-using-git-and-nas-as-remote-repository/

gitインストールするために、実行したコマンドは以下の通り。

```ターミナル.
brew install git
```

ちなみに、gitをインストールするためには、homebrewをインストールしている必要があるのですが、homebrewはすでにインストール済みなのでこの手順は今回はパスしました。
homebrewのインストール方法はhomebrewのサイトにインストール方法が書いてあります。
実行する場合は以下の通りです。

```ターミナル.
/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
```

- homebrewのページ
 - https://brew.sh/index_ja

### windowsの場合
以下からgitをダウンロードしてインストールしてください。

- gitの本家サイト
 - https://git-scm.com/

インストールすれば環境変数にパス(Git/cmdまでのパス)が自動で追加されるはずです。
されていない場合はパスを追加しましょう。

## 2. NASにリモートリポジトリ(ベアリポジトリ)を作成する。
NASにリモートリポジトリを作成するコマンド(ベアリポジトリを作成する)

```ターミナル.
cd (NAS上のリモートリポジトリを作成したいフォルダ)
git init --bare
```
簡単にリモートリポジトリができます。

### windowsの場合
NAS上に移動する際はネットワークドライブへのドライブ切替が必要です。
ドライブ切替方法は以下の通り。

- [ネットワークドライブを作成する。](https://web.tku.ac.jp/iss/guide/network/tool/networkdrive/windiwswindows-10.html)
- コマンドプロンプトからネットワークドライブに切り替える。  

```コマンドプロンプト.
Zドライブとして割り当てた場合
>z:   これで切り替え可能
z:>cd 作成したいフォルダまで移動する。
```
- ベアリポジトリ(リモートリポジトリ)を作成する。  

```コマンドプロンプト.
z:\\保存先>git init --bare
```


## 3. forkアプリをインストールする。
以下のURLからforkアプリをインストールします。

- forkアプリURL
 - https://git-fork.com

インストール後updateするか問われるので念のためupdateをしておきます。

~~ログインを求められるので、gitアカウントを紐づけてログインします。~~
~~→ここ記憶が曖昧です。gitkrakenでもgitアカウントの紐づけを行なってログインしたのですが、forkアプリはメールアドレスだけだったかも。。。~~

インストール時に名前とメールアドレスの入力を求められます。
これは、forkツールによるcommit操作等でだれがcommitしたかの来歴に自分の情報を残すために必要な作業のため、正しいものを入力してください。

## 4. forkアプリでクローン(ローカルリポジトリ<ノンベアリポジトリ>を作成)する。
- forkアプリ起動します。
![1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/1afc86eb-32ef-d7ee-5ca4-f88e0f159336.png)

- 画面左のRepositoriesを副ボタン(右)クリック->Clone...をクリック。
![2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/a2e61da2-9694-580b-5766-90d4be9bb8cb.png)

- そうするとこの画面になります。
![3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/65737e67-b51c-c1a6-12d3-598e28f4e0d3.png)

- Repository URLに「2」の手順で作成したリモートリポジトリのフォルダを、ドラッグ&ドロップします。(テキストフィールドをクリックして有効にするとドラッグ&ドロップできます。)
 - windowsの場合、ここで指定するパスに半角スペースが含まれている場合、ダブルクォーテーション("")でパス全体を囲ってください。そうしないと失敗します。
- Parent Directoryを選択->Choose...をクリックしてローカルリポジトリ(ノンベアリポジトリ)を作成する出力先を選択します。
- Nameにはローカルリポジトリ(ノンベアリポジトリ)のフォルダ名を設定します。
- Otherのボタンが選択されているか確認して、Cloneをクリック。

これでクローンできます。こんな感じの画面になります。
![4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/5b389dc0-7443-14c0-0e48-86ca3fa2cef2.png)

まだ何もコミットしていないので、この画面だとできてるのかよくわからないですね。

今回、Nameを「local_repo」にして作成してみたので
このとき「local_repo」フォルダを開くと、このように「.git」フォルダができていることがわかります。
![5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/28fba770-d510-195f-5fa8-02f3e9ba126a.png)

一応、localのリポジトリが出来てそうです。

## 5. forkアプリでローカルリポジトリをコミットする。
- 3の手順で作ったローカルリポジトリ(「.git」があるフォルダ)に空のテキストファイルを置いてみます。
![6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/67f897f1-d576-221c-b6a8-19f939ce6b72.png)

- このときforkアプリではこのように表示されます。
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/cb7b656a-f632-6171-bbea-df7b724c96e2.png)

左側のChangesに(1)がつきました。
勝手に画面が更新されてました。

- Changes(1)をクリックします。
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/40a32042-9b15-33ab-a57e-2ed5b9367b07.png)

追加したファイルがUnstaged Changesの箇所に表示されるようです。
ここにはローカルリポジトリにコミットしないファイルが表示されるようです。

- file.txtを選択してStageボタンをクリック。
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/2eb654d8-bd9f-6e44-acb1-7f01dbaae989.png)

Staged Changesに移りましたね。
ここにはローカルリポジトリにコミットするファイルが表示されるようです。
戻すときは、戻したいファイルを選択してUnstageボタンをクリックで戻ります。

- 右下のComment subjectにコメント「新規作成」を入れます。
- 入れると、Commit 1 File ボタンが有効になるのでクリックします。
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/78a14bb9-3284-b105-489b-44db8544b8e8.png)

Changesの(1)が消えて、Branchesにmasterができています。

- masterをクリック
![11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/3f3a0585-ef61-920b-33cc-e3aa3f539180.png)

先ほど追加したファイルと、入力したコメントが表示されているのがわかります。
これでローカルリポジトリへのコミット操作は完了です。

## 6. forkアプリでNASに作成したリモートリポジトリにプッシュする。
- masterを選択して、↑矢印のボタン(Pushボタン)をクリック。 

![12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/65796f67-d9dc-18bd-f52b-431b91c57c68.png)

-この画面が出るので、Pushをクリック。
![13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/7fad78d5-1f72-68bb-845e-a26fb68783b7.png)

-選択部分の箇所にorigin/masterが追加されているのがわかります。また、画面左側ののRemotesの▶︎をクリックすると、originの下にmasterができてるのがわかります。
![14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/833cccf7-c117-126a-f954-5d230c019a3f.png)

これでプッシュもできました。
本当にプッシュできているかどうか「4」の手順で別の場所にlocal2_repoを作成してリモートリポジトリをクローンしてみます。

- タブの+ボタンをクリックします。
![15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/844d3337-a444-b591-4df0-6a078f61cf74.png)
+ボタンは右側です。

- 4の手順を踏んで今度はNameをlocal2_repoにしてクローンします。
![16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/aac6f4c3-7d39-a412-8452-39a27ff41469.png)

実際のフォルダにも取得できているので反映されていることがわかりますね。
![18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/d2d2e7b3-a96f-c3f3-765a-de492911a9f2.png)

## 7. forkアプリでリモートリポジトリをフェッチする。
ここまでの手順でlocal_repoとlocal2_repoを作成したので、実際の運用では、おそらく複数人がgitをいじるので、フェッチするところまで確認してみます。
まずはlocal_repoの方を更新してコミットして、リモートリポジトリにプッシュします。ここまでの手順は今までの流れでできるのでスクショは省略します。

ここまで実施すると、local2_repoの内容は古いままなのでフェッチを行います。

- local2_repoのタブにして、メニューバーの一番左上の、↓(Fetch)ボタンをクリックし、右下のFetchをクリック。
![19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/377612/27ca040c-cd04-cc59-079c-6f2c4f55ad13.png)

これでフェッチ完了です。
フェッチの場合は、master(1)となるので、新しくできたorigin/masterをダブルクリックするとmasterを更新できます。
真ん中のpullボタンであればローカルリポジトリへのコミットも同時に行ってくれる動作となります。

## その他
なお、チェックアウトについても更新履歴をクリックするだけで切り替えられるので簡単でした。
動作は調べずにやってもなんとなくできてるので、forkアプリは入りやすくわかりやすかったです。今後これで、NASをリモートリポジトリにしてバージョン管理を行なっていきたいと思います。