【Git】バージョン管理システムを導入・構築する【Bitbucket/Sourcetree編】

#### 背景
ソースコードやドキュメント、画像ファイル等々、成果物や製作物のバージョン管理を行なうために、システムを導入・構築することがあると思います。
バージョン管理システムの導入から構築までについて、以下に記します。
※2020/11/29時点の情報です。

先人たちの知恵をお借りするなどして解決できたことを、この場をお借りして感謝するとともに、大変恐縮ですが自分のメモとしても、こちらへまとめておきます。

## Bitbucket/Sourcetree編
Bitbucketとは：

> [Bitbuckt](https://bitbucket.org/)は、MercurialまたはGitリビジョン管理システムを使用するソースコードおよび開発プロジェクト向けに、アトラシアン(Atlassian)が運営するWeb ベースのバージョン管理リポジトリホスティングサービスである。商用プランと無料アカウントの両方を提供している。

引用: [Wikipedia Bitbucketの項目](https://ja.wikipedia.org/wiki/Bitbucket)

Soutcetreeとは：
> [Sourcetree](https://www.sourcetreeapp.com/)は、GUIで操作できるデスクトップ向けのGitクライアントソフトウェア（無料）です。アトラシアン(Atlassian)が運営。

ちなみに、[Atlassian](https://www.atlassian.com/)社は、タスク管理の[Trello](https://trello.com/home)も提供しています。


#### 開発環境
- Windows 10 Pro
- Git 2.29.2
- Bitbucket
- Sourcetree 3.3.9  
（以下参考）
- Python 3.9
- Django 3.1.3
- PostgreSQL 13.1
- Nginx 1.19.5
- Gunicorn

### 手順

#### 1. Bitbucketのアカウント作成
[Bitbuckt](https://bitbucket.org/)のサイトへアクセスし、「[Get it free](https://bitbucket.org/account/signup) 」ボタンを押下。
入力項目へ必要事項を入力して、サインアップ ボタンを押します。
![BitbucketGetItFree.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/21f18b63-d102-fabf-68df-9103df8c541c.png)

#### 2. Sourcetreeのインストール（Gitを含む）
[Stourcetree](https://www.sourcetreeapp.com)公式サイトへアクセスし、利用しているPC環境に適したインストーラーをダウンロードします。
インストーラーをダブルクリックして、あとはガイドに従ってインストールを終了させます。  

もし、インストールの途中で「Bitbucket」「Bitbucket Server」の選択を求められた場合は、前者（Bitbucket）を選択します。
その後、[Git](https://git-scm.com/)も一緒にインストールするように、オプションを設定する画面で、「Git」のチェックボックスをONにしてください。
![SourcetreeDownload.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/7518d364-4f14-3055-7e3e-a945d94a865e.png)

#### 3. リモートリポジトリの作成
3-1. Bitbucketにログイン

3-2. 「Create Repository」を押下
![BitbucketCreateRepository.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/5f4f1608-20f1-38ab-65bd-8e8c9ecc6317.png)

3-3. 「新規リポジトリの作成」画面で、必要事項を入力し、「リポジトリの作成」ボタンを押下
![BitbucketCreateRepository1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/e29f5823-22a6-0652-96d8-b1ffd55f5d89.png)

- Workspace  
自分のアカウントを選択します。
- プロジェクト  
任意の名前を入力します。既に作成済みの場合は選択します。
- リポジトリ名  
任意の名前を入力します。
- アクセスレベル
ソースコードを非公開にする場合は、チェックONとします。  
**【注意】**  
いくら非公開とは言えども、個人情報、秘密鍵、パスワードなどは、そのままの状態で管理しないことです。
- READMEを含めますか？    
「No」を選択します。  
READMEをリモートリポジトリに作成してしまうと、あとで行うプッシュ処理でローカルリポジトリとリモートリポジトリが競合してしまいます。
- Include .gitignore?  
「No」を選択します。
ここで`.gitignore`をリモートリポジトリに作成してしまうと、4.でローカルリポジトリとして指定するパスにSourcetreeが作る`.gitignore`ファイルと競合してしまいます。

3-4. リモートリポジトリが作成される。空の状態。
リモートリポジトリのURLは、メモ帳などにをCppy&Pasteしておくと良いでしょう。

#### 4. ローカルリポジトリの作成
4-1. Sourcetreeを起動
4-2. 「Create」ボタンを押下
4-3. 「Create Repository」の画面で、「保存先のパス」に管理したい成果物を格納してあるディレクトリを選択し、「作成ボタン」を押下
「出力先ディレクトのエラー」ダイアログが表示される場合は、「はい」を押下

![ST_CreateLocalRepository.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/54fbf1f6-df45-2fee-0b1d-5bc2ba05e744.png "ローカルレポジトリの作成")

（参考）
　python/djangoの場合は、ここにプロジェクトディレクトリを指定します。

```:ターミナル
$ mkdir <プロジェクト名>
$ cd <プロジェクト名>
$ django-admin startproject config .
$ python manage.py startapp <アプリケーション名>
```
最後の「.」（ドット、ピリオド）は地味ながらも大変重要な意味を持っており、これはカレントディレクトリでプロジェクトを立ち上げるという意味になります。
たとえば、プロジェクト名を「shironeko」、アプリケーション名を「daibouken」とすると、以下のようなディレクトリ構造となります。

```
shironeko/                     # プロジェクトディレクトリ
    manage.py
    config/
        __init__.py
        settings.py
        urls.py
        wsgi.py
    daibouken/                 # アプリケーションディレクトリ
        __init__.py
        ...
```

話を戻します。

#### 5.バージョン管理対象外とするファイルの登録
Sourcetreeに指定したディレクトリ配下には、バージョン管理する必要の内ファイルも含まれて表示されています。
pythonを例にすると、コンパイルファイル（拡張子「.pyc」のファイル）がそれにあたります。
このようなファイルを管理対象外として登録します。
こうすることで、以後は管理対象から外れ、これらのファイルに変更があってもSourcetree上に表示されません。
※pycharmをお使いの方は、「.idea/」ディレクトリ以下のファイルも対象外としましょう。

管理対象外とする手順は以下の通り。

5-1. 対象外としたいファイルを選択して右クリック、表示されたメニューから「無視」を選択
「無視」ダイアログボックスが表示されます。

5-2. 以下から条件を選択します。（ラジオボタン）
・「名前(完全)一致するファイルを無視
・同じ拡張子のファイルを全て無視
・以下にあるも物全てを無視［フォルダ選択］
※pythonコンパイルファイルであれば、『同じ拡張子のファイルを全て無視』を条件とします。

5-3. OKボタンを押下


#### 6. ローカルリポジトリにコミットする
Sourcetreeを以下の手順で実行
6-1. 「全てインデックスに追加」をクリックします。（初回は必ず）
![ST_CommitLocalRepository.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/1c93d45c-efb8-aa47-3f9c-f56467f2cae9.png)
6-2. コミットメッセージを入力し、「コミット」ボタンを押下
![ST_CommitLocalRepository2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/78d373a1-9733-170f-b20b-0c9fbe0e8652.png)

#### 7. Sourcetreeにリモートリポジトリを登録する
Sourcetreeを以下の手順で実行
7-1. 右上の「設定」ボタンを押下し、「リモート」タブの追加ボタンを押下
![ST_pushRemoteRepository0.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/db54e8b6-90d6-9861-fe61-404cc5263f36.png)
7-2. リモートの詳細設定へ必要事項を記入、OKボタンを押下
![ST_pushRemoteRepository1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/b4ea53a4-523e-15a8-21f7-b031b170b0b0.png)

- リモート名  
任意　　お仕事でのプロジェクト名や、アプリケーション名（ID）など
- URL/パス  
Bitbucketで作成したリモートリポジトリのURL  
入力後に「LegacyAccountSettings:」の各項目が自動入力される。

#### 8. リモートリポジトリにプッシュする
Sourcetreeを以下の手順で実行
8-1. プッシュボタンを押下
![ST_pushRemoteRepository2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/57bf1044-c1be-b29e-93b3-d76d48c2d04c.png)

8-2. プッシュ先にリモートリポジトリを選択し、「対象」をチェックON、プッシュボタンを押下
![ST_pushRemoteRepository3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/f03ad7db-105d-4897-77a3-b959cf20f8fd.png)

プッシュに成功すると、左サイドメニューのHistoryを選択すると、プッシュした結果に「リモートリポジトリ名とブランチ名のタグ」がマーキングされています。
表示されていない場合は、再度メニューのブランチから「ブランチ名」を選択します。
![ST_pushRemoteRepository4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/902793/6435ff08-013b-359e-8db1-733952ffd5e6.png)

#### 9.運用環境にソースコードを配置する場合  
**【例】Python仮想環境**

python仮想環境ディレクトリへ移動します。

```:ターミナル
$ cd ~/<仮想環境ディレクトリ>
```

9-1.初回
`git clone`コマンドを実行します。
途中でBitbucketのパスワード入力を求められます。

```:ターミナル
$ git clone https://<bitbucketのアカウント>@bitbuket.org/<bitbucketのアカウント>/<リモートリポジトリ名>.git
```

9-2. 差分のみを反映する場合（2回目以降）
Djangoのプロジェクトディレクトリへ移動

```:ターミナル
$ cd ~/<仮想環境ディレクトリ>/<プロジェクトディレクトリ>
```

`git pull`コマンドを実行します。
途中でBitbucketのパスワード入力を求められます。

```:ターミナル
$ git pull
```
　
　

以上、『【Git】バージョン管理システムを導入・構築する【Bitbucket/Sourcetree編】』でした。

---
#### (編集後記)
Qiitaなどのサイトや書籍を読みながらリポジトリの設定をしていても、自分では何度も手順を間違えてしまい、pythonの仮想環境(venv)から作り直したりしました。
操作ミスで`.gitignore`ファイルが無くなったり、不整合となったりしたこともありました。
導入・構築について、もっと良い方法があります！という情報をお持ちの方、是非コメントいただければと思います。

リモートリポジトリ自体は、[GitHub](https://github.co.jp/)での管理が主流のようですので、GitHubについても別でまとめようと思います。