【入門】SourcetreeからGitHubへ初push

# はじめに

[前回の記事](https://qiita.com/nkojima/items/239fdc3a48ef1b0a4da0)の続きで、SourcetreeからGitHubへコードをアップ（push）する手順をまとめてみました。

通常はどなたかが作ったリポジトリをローカルにコピー（Clone）するところからスタートすることが多いそうですが、今回はゼロから始める方法となります。

# 事前準備

以下の作業を事前に済ませておきます。

1. GitHubのアカウントを作成する。
 * [【2019年1月現在】GitHubアカウント作成方法](https://qiita.com/okumurakengo/items/848f7177765cf25fcde0)
2. [Sourcetreeをインストールして、SourcetreeとGitHubを紐づけておく。](https://qiita.com/nkojima/items/239fdc3a48ef1b0a4da0)

# オプションの設定

* Sourcetreeを開いた後、［ツール］>［オプション］と進み、オプション設定画面を開きます。

![Sourcetree_b_01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/6e6952cc-25d8-0c69-f125-6dda3f342b47.png)

* オプション設定画面で、フルネームとメールアドレスを入力して［OK］を押します。

![Sourcetree_b_02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/5205e6ae-ffe6-e961-1a33-cac263667e21.png)

# ローカルリポジトリの作成

* ［＋Create］を押して、リポジトリ作成画面を開きます。

![Sourcetree_b_03.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/123ef055-b3c0-4617-ab87-9568cb2746d7.png)

* リポジトリのフォルダパスと、使用するバージョン管理システム（※ここではGit）を指定して、［作成］を押します。
 * ここでは、リポジトリのフォルダ名と同じ「test」がリポジトリ名となります。

![Sourcetree_b_04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/5219b5ab-4762-7736-c274-988c7804e6a6.png)

* リポジトリの作成が完了すると、リポジトリのタブが表示されます。
 * ここまでで作成したリポジトリは、自分のマシン内に作られる「ローカルリポジトリ」となります。

![Sourcetree_b_05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/c35149c9-7cd5-2b3a-7c1f-93d0035cf0e2.png)

# インデックスへの追加

* 以下のコードをHello.javaという名前のファイルとして、testフォルダ（D:\workspace\test）内に保管します。

```java:Hello.java
public class Hello {
	public static void main(String[] args) {
		System.out.println("Hello, " + args[0] + "!");
	}
}
```

* testフォルダにHello.javaを置くと、Sourcetreeの画面が自動的にリフレッシュされて、以下のように5パネルの画面になります。

|パネルの位置|パネル名|説明|
|---|---|---|
|左||メニューが表示されます。|
|中央下|作業ツリーのファイル|ローカルリポジトリ内にあるすべてのファイルが表示されます。|
|中央上|Indexにステージしたファイル|インデックスに追加された、コミット対象のファイルが表示されます。|
|右||選択中のファイルの中身がプレビューされます。|
|下||コミットに関する操作をするパネルです。|

* ここで、変更のあったファイルを選択して、［選択をインデックスに追加］を押します。
 * インデックスに追加する操作は、Subversionだと「当該ファイルをSubversionの管理下に置く（add）」と似ています。
 * ですが、Subversionのaddが最初の1回きりなのに対して、Gitの場合はファイルに変更が発生する度にインデックスへ追加する必要があります。
 * この点については、[SubversionユーザがGitを使った時に勘違いした5つのこと](https://qiita.com/pink/items/30b3ca57ad6f6ac3979b#3-git%E3%81%AB%E3%81%AF%E3%82%A4%E3%83%B3%E3%83%87%E3%83%83%E3%82%AF%E3%82%B9%E3%81%8C%E5%AD%98%E5%9C%A8%E3%81%99%E3%82%8B)にも書かれています。

![Sourcetree_b_06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/83b7def1-89c4-4448-0933-1ee6b9509fa6.png)

* Hello.javaがインデックスに追加されると、以下のような表示に変わります。
 * 右のパネルで［＋］となっている緑色の行が今回追加された行で、［－］となっている赤色の行が今回削除された行となります。

![Sourcetree_b_07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/136cb136-3773-96a5-a5a5-9d57b550f5cf.png)

# コミット

* インデックスに追加されたファイルの内容に問題が無ければ、コミットメッセージを記入した上で、［コミット］を押して（ローカル）リポジトリにコミットして変更内容を記録します。
 * コミットメッセージに適切な変更内容を記入しておかないと、後で何の変更があったのかが分からなくなってしまいます。
 * CVSやSubversionも同じですが、様々な変更を1回のコミットで済ませるのではなく、コミットを適切なサイズ（粒度）に保たないと変更内容が分からなくなってしまいます。
* Gitはローカル/リモートの2つにリポジトリが分かれているので、ローカルリポジトリへコミットしただけではリモートリポジトリには反映されません。
 * CVSやSubversionだとリポジトリが1個なので、CVSやSubversionに慣れている人だと、ここまでの操作で何となく「終わった感」を感じてしまいますが...

![Sourcetree_b_08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/d81e19e2-4b29-5ba2-521b-6e27adb3776c.png)

# リモートリポジトリの作成

* GitHubで［Repositories］タブを開いて、［New］ボタンを押してリポジトリを追加します。
 * リポジトリのオーナー名とリポジトリ名を合わせてFQDNにする都合上、リポジトリ名のチェックが入ります。
 * ここで指定したオーナー名とリポジトリ名は、後でSourcetree側で設定する際に使います。
* なお、今回はリモートリポジトリを［Public］で作成しました。
 * 業務用の場合は［Private］にした方が良いと思いますが、無料で使うにはユーザー数などの制限があるそうです。

![Sourcetree_b_20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/8aa5c0c8-9543-a0c4-08bd-2ea8efaf1235.png)


# リモートリポジトリへpush

* 左側のパネルで［history］を選んで、history画面を開いた後、画面右上の［設定］を押します。

![Sourcetree_b_09.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/b6e67a3c-8197-2d8a-1373-6008e098f07c.png)

* 開いた設定画面で［リモート］タブを選択した後、［追加］ボタンを押してリモートリポジトリの情報を入力します。

![Sourcetree_b_10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/2ca15d90-7600-0d59-2927-50da87dbf2c1.png)

* リモートの詳細設定画面で、リモートリポジトリの情報を設定します。
 * リモート名は、リモートリポジトリ名となります。
 * URLパスは、`https://github.com/{リポジトリのオーナー名}/{リモートリポジトリ名}.git`とします。
 * 認証にSSHキーを使用する場合は、`git@github.com:{リポジトリのオーナー名}/{リモートリポジトリ名}.git`とします。

![Sourcetree_b_11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/d5dcd227-8d78-c231-4355-df3a544f0359.png)

* 再びhistoryの画面へ戻り、画面左上の［プッシュ］ボタンを押します。

![Sourcetree_b_12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/1421a383-583d-8bd2-b79c-c46ac00afde7.png)

* ［対象］にチェックを入れると、自動的にリモートブランチがmasterにセットされます。
* この状態で［プッシュ］を押すと、リモートリポジトリのプッシュが完了します。
 * GitHubのリポジトリの画面を更新すると、プッシュされたファイルが見られるはずです。

![Sourcetree_b_13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/312166/2e3f1958-df54-014d-7507-baf6902506b1.png)

# 備考

2021/08/14にGitHubへPushしようとしたところ、以下のエラーメッセージが出ました。

> Support for password authentication was removed on August 13, 2021. Please use a personal access token instead.

このエラーを見る限り、パスワードによる認証は前日の2021/08/13にサポート終了になったようです。

# 参考URL

* [SourceTreeでリモートリポジトリ（GitHub）にプッシュするための設定方法](https://nelog.jp/sourcetree-github-settings#SourceTree)
 * SSHキーを使う場合は、こちらの記事が参考になると思います。