共有フォルダにリモートリポジトリを作る手順


# 背景
諸事情によりGitHubなどが使えず、リモートリポジトリを社内LANの共有フォルダなどにおきたい場合の手順について調べましたので、記録しておきます。

環境はWindows10で、Gitはインストール済みという前提です。

まず、Git Bashでの操作を説明するため、テキストファイルを管理対象とする例を説明します。
次に、VisualStudioに備わっているGit操作を使った操作手順について説明します。使用したVisualStudioは2015です。

# 概要
共有フォルダにおかれた1つのリモートリポジトリを共有し、AさんとBさんの二人が並行して作業する場合を想定します。

大まかな手順としては次のようになります。
1. 今回の説明のために使用する3つのフォルダを準備します
2. AさんのPC上に最初のプロジェクトを作る
3. Aさんのプロジェクトのクローン（ベア）を共有フォルダ上に作る
4. Aさんのプロジェクトにリモートリポジトを設定する
5. 確認としてAさんのローカルリポジトリで変更をコミットしてプッシュする
6. BさんのPCに3.のリモートリポジトリのクローンを作る

# 手順（Git Bashからの操作）
## 手順１ 説明用のフォルダを準備する
今回は説明のために下図のように1つのフォルダの下にAさん、Bさんの作業フォルダとリモートリポジトリをおく共有フォルダを作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/75a1c7e8-6039-aaab-99ba-0053836cfd91.png)

実際にはこれら3つのフォルダは社内LANなどを介して離れたところに作られます。

## 手順２ 最初のプロジェクトを作る
AさんのPC上で最初にプロジェクトを作ります。プロジェクトといってもただのテキストファイルを含む下図のようなフォルダです。テキストファイルdoc.txtの中身はブランクです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/9e4f8cf4-47a4-7f25-b070-0ccf2b5df9a5.png)

このフォルダをGit管理対象にするため、Git Bashから次の操作を行います。

```GitBash:~/prog/A-san/txt
$ git init
$ git add --all
$ git commit -m 最初のコミット
```

## 手順３ ベア（リモート）リポジトリを作る
Gitで管理されているAさんのプロジェクトtxtのベアリポジトリを作ります。
Git Bashでリモートリポジトリを作りたいフォルダに移動し、下記の操作を行います。

```GitBash:~/prog/_depot
git clone --bare ../A-san/txt txt.git
```
作成するベアリポジトリの名前には末尾に.gitをつけておくといいようです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/7fc29575-5d7f-139a-8ade-ef48bcaabe47.png)


## 手順４ Aさんのプロジェクトにリモートリポジトリを設定する
手順３では`git clone`を使用しましたが、`git clone`はクローン元に対しては何も操作を加えないため、この時点ではAさんのローカルリポジトリはベアリポジトリが作られたことを知りません。

Aさんは作業した内容をプッシュする必要がありますので、Aさんのローカルリポジトリにプッシュ/プル先となるリモートリポジトリを設定します。

Git Bashで~/prog/A-san/txtに戻り、下記の操作を行います。

```GitBash:~/prog/A-san/txt
git remote add origin ../../_depot/txt.git
git remote update
git push --set-upstream origin master
```

3行目は厳密にはプッシュの操作ですが、私の環境では`git push`では初回は必ずエラーが出るのでここで一度このコマンドを送信しておきます。

## 手順５ 確認
現時点でAさんのローカルリポジトリは~prog/_depotにおいたリモートリポジトリとリンクしており、Aさんが行った変更をプッシュできる環境ができ上がっています。

確認のため、~/prog/A-san/txt/doc.txtに下記の1行を追記してコミット、プッシュします

> Aさん、1行記入

```GitBash:~/prog/A-san/txt
git add -all
git commit -m Aさん、1行記入
git push
```

## 手順６ BさんのPCにリモートリポジトリのクローンを作る
Bさんが作業できるように、Git Bashで~/prog/B-sanに移動して下記の操作を行います。

```GitBash:~/prog/B-san
git clone ../_depot/txt.git
```

この操作だけで下図のようにBさんのフォルダにプロジェクトが作られています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/2c41e666-71c1-f000-bd49-059dcc957a69.png)

このdoc.txtの中身にも手順５で記入した1行目の内容がちゃんと反映されています。
また、このローカルリポジトリはリモートリポジトリをクローンしているので、クローン元がリモートリポジトリとして既に設定されているので、手順４に相当する操作は不要です。

以上でAさん、Bさんが並行して作業する環境ができあがりました。

# 手順（VisualStudio2015からの操作）

VisualStudioにはGit操作の機能が備わっていて、これを使用するとラクチンです。
手順の流れはGit Bashの場合と同じですが、手順１は完了しているので、手順２から説明をスタートします。

## 手順２ 最初のプロジェクトを作る

VisualStudioから新規プロジェクトの作成を行います（appという名前の新規プロジェクトを作ります）。
下図のようなフォルダが作られます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/22a197e5-cb1c-ce9e-4b6c-dac4c83ac5a4.png)

これをGit管理するためにはVisualStudioの右下のGitボタンを押すだけでOKです。
これで.gitignoreも自動的に生成され、最初のコミットをやってくれます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/9f71fab5-8930-d2bd-7564-58e1d9e39325.png)

ボタンを押すと下図のようにGit機能が使えるようになります。
左から、プッシュ待ちの変更数、コミット待ちの変更数、ローカルリポジトリ、ブランチが表示されています。
VisualStudioではこの辺をクリックするとGit操作ができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/9e0909e4-adaf-0047-a3cb-16b69806159f.png)

## 手順３ ベア（リモート）リポジトリを作る
この手順はGit Bashを使います。（VisualStudioでもできるかもしれませんが）

```GitBash:~/prog/_depot
git clone --bare ../A-san/app app.git
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/6f203abe-d547-3ef5-b07e-c472f37dfce8.png)

## 手順４ 最初のプロジェクトにリモートリポジトリを設定する
この手順もGit Bashを使います。
VisualStudioの場合、1行目の操作でリモートリポジトリを指定する際、
絶対パスを使わないとプッシュできませんでした。

```GitBash:~/prog/A-san/app
git remote add origin C:/xxx/prog/_depot/app.git
git remote update
git push --set-upstream origin master
```

3行目の操作によりプッシュがされますので、VisualStudioの表示は下図のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/6e28b4ab-ad7f-6a2c-fb71-189212dcbf33.png)

## 手順５ 確認
AさんのVisualStudio上で何らかの変更を行います。
たとえばフォームにボタンを追加すると、下図のように3つのコミット待ちの変更が出てきますので、これをコミットし、プッシュしておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/9a822d42-e56f-95c3-d16b-e3a26bc9e43b.png)

## 手順６ BさんのPCにリモートリポジトリのクローンを作る
この作業もGit Bashを使用します。

```GitBash:~/prog/B-san
git clone ../_depot/app.git
```

これで下図のようにBさんのフォルダにプロジェクトが作られていて、開いてみると手順５で追加したボタンがちゃんと反映されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/280874/63506cde-c70f-3b26-612c-14b92f81bd2f.png)


# おまけ

上記はGitはインストール済み、初期設定済みの前提でしたが、メンバーが追加になった時など、新たにGitをインストールした際、Gitに設定する手順もメモしておきます。

```GitBash:GitBash
git config --global user.name yakisobamilk
git config --global user.email yakisoba@milk.com
```