公開日: 2023年9月17日

Git 第2回: ローカルリポジトリを GitHub や Bitbucket に上げよう

前回作ったサンプルプロジェクトを GitHub に上げてみます。 ついでに、もうひとつのホスティングサービスである Bitbucket についても軽く触れます。 ちなみに当サイトのソースコードも Bitbucket に置かせてもらっております。

SSH の設定

GitHub との通信は SSH で行うので、アカウントを作ったら、まず公開鍵と秘密鍵のペアを作り、公開鍵のほうを GitHub に登録します。

SSH 鍵の生成

キーペアの生成には ssh-keygen コマンドを使います。-tオプションで生成アルゴリズムを指定します。ホスティングサービスでサポートされているものを指定しましょう。下の例では Ed25519 を指定しています。

% ssh-keygen -t ed25519
Generating public/private ed25519 key pair.
Enter file in which to save the key (/home/mijinco/.ssh/id_ed25519): /home/mijinco/.ssh/id_ed25519_gh
Created directory '/home/mijinco/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/mijinco/.ssh/id_ed25519_gh
Your public key has been saved in /home/mijinco/.ssh/id_ed25519_gh.pub
The key fingerprint is:
SHA256:AXxNruLXhIpLehd0lR7VquJpXxLKFuj3ye7MRlm8zP4 mijinco@oshiruko
The key's randomart image is:
+--[ED25519 256]--+
|     ..  o.o..   |
|      ....=   .  |
|       ..o.o .   |
|      ...+. +    |
|     .o.S o* .   |
|     +.+.=+.+    |
|    o +o*+o..    |
|   o...++=.+.    |
|  .... . =X  .E  |
+----[SHA256]-----+
% ls ~/.ssh/
id_ed25519_gh       id_ed25519_gh.pub

なお、途中でパスフレーズの入力を求められます。空欄のままでも鍵は生成できますが、セキュリティー的には設定しておくのが望ましいとされています。パスフレーズを設定すると、このキーペアでアクセスするたびにパスフレーズを入力しなければならず面倒ですが、私の場合はそれほど頻繁にアクセスするわけではないので、まいっかと思っています。

一応、シェルを閉じるまでの間だけであれば、パスフレーズを省略する方法があります。「ssh-agent」「ssh-add」などのキーワードでググってみてください。この方法もシェルを起動し直すと再入力が必要となるので、やはり面倒です。

デフォルトではキーペアは ~/.ssh/ に保存され、ファイル名は秘密鍵が id_ed25519、公開鍵が id_ed25519.pub となります。上の例では GitHub 用の鍵であることを明示するために末尾に「_gh」を付けたので、それぞれ id_ed25519_gh、id_ed25519_gh.pub となります。

秘密鍵のファイルは自分のみ読み書きできるようにパーミッションを変更しておいたほうがいいかもしれません。

% chmod 600 ~/.ssh/id_ed25519_gh

クライアント PC 側の設定

~/.ssh/config を作成し、次のように書いておきます。ファイルがすでにある場合は追記してください。

~/.ssh/config
Host github github.com
        HostName github.com
        IdentityFile ~/.ssh/id_ed25519_gh
        User git

また、~/.gitconfig に次の 2 行を追記してください。 HTTPS でのアクセスを SSH に置き換えるための設定 (らしい) です。

~/.gitconfig
[url "git@github.com:"]
    insteadOf = https://github.com/

GitHub に公開鍵を登録する

上で作成したキーペアのうち、公開鍵のほう (id_ed25519_gh.pub) を GitHub に登録します。

  1. GitHub にログインし、画面右上のプロフィール画像をクリックし (図 1 (a))、[Settings] を選択する (同 (b))。
  2. Settings 画面のメニューから [SSH and GPG keys] を選択し、[New SSH key] ボタンをクリックする (同 (c))。
  3. Add new SSH Key 画面 (同 (d)) で各欄に次のように入力する。
    • Title: 自分で識別しやすいように好きな名前を付ける。例えば <クライアントマシン名>/<OS 名> など。
    • Key type: ここでは SSH で接続したいので、Authentication Key (認証キー) を選択する。
    • Key: 公開鍵ファイル (上の例では ~/.ssh/id_ed25519_gh.pub) の中身をコピペする。
図 1
図 1

接続をテストする

ここまで終えれば GitHub に接続できるはずです。テストしてみましょう。端末エミュレータを開いてssh -T git@github.comと実行します。途中で「Are you sure you want to continue connecting?」と訊かれたら yes と回答します。キーペアの生成時にパスフレーズを設定した場合は、それも入力します。最終的に「You've successfully authenticated, but GitHub does not provide shell access.」と返ってくれば成功です。

% ssh -T git@github.com
The authenticity of host 'github.com (20.27.177.113)' can't be established.
ED25519 key fingerprint is SHA256:+DiY3wvvV6TuJJhbpZisF/zLDA0zPMSvHdkr4UvCOqU.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added 'github.com' (ED25519) to the list of known hosts.
Enter passphrase for key '/home/mijinco/.ssh/id_ed25519_gh':
Hi mijinco0! You've successfully authenticated, but GitHub does not provide shell access.

GitHub に空のリポジトリを新規作成する

GitHub にログインして、空のリポジトリを作成します。ここでは次の条件で作成しますが、状況に応じて臨機応変にやってください。
  • リポジトリ名は hp-example とする (ローカルリポジトリと同名)。
  • 公開リポジトリ (誰でも閲覧可能) にする。
  • リポジトリに付随するファイル (README、LICENSE、.gitignore) は GitHub 上では作らない (自分で作る)。
手順は次のとおりです。
  1. GitHub メイン画面右上のほうにある [+] (Create new...) をクリックして [New repository] を選択する。図 2 のような画面になる。
  2. 各欄に入力する。
    • Repository name: リポジトリの名前。ローカルリポジトリと同じ名前にしておくのが無難。
    • Description: リポジトリの説明。任意入力。
    • Public: 公開リポジトリにするのでチェックを入れる。
      ※ 非公開リポジトリにするなら [Private] を選ぶこと。
    • Initialize this repository with: すべてのチェックをオフにする。
  3. [Create repository] ボタンを押す。
図 2
図 2

クライアント PC 側にリモートリポジトリを追加する

今しがた GitHub に作成したリモートリポジトリは、クライアント PC からは git@github.com:mijinco0/hp-example.git という形でアクセスします。ただこれを毎回打っていては指が疲れてしまうので、リモートリポジトリに別名を付けることができます。

クライアント PC 側に戻り、ローカルリポジトリに移動して次のコマンドを実行してください。これでリモートリポジトリに origin という名前でアクセスできるようになります。

% git remote add origin git@github.com:mijinco0/hp-example.git

ちなみに別名は origin でなくても好きな名前でいいのですが、リモートリポジトリを clone したときに付くデフォルトの別名が origin になるので、慣例として origin がよく使われるようです。

git remote-vオプションを付けると、現在のフルネームと別名を確認することができます。

% git remote -v
origin  git@github.com:mijinco0/hp-example.git (fetch)
origin  git@github.com:mijinco0/hp-example.git (push)

ローカルリポジトリをリモートリポジトリに反映させる

リモートリポジトリは今のところ空の状態です。そこにいよいよ中身を投入します。ローカルリポジトリに移動して、もし master ブランチにいなければ master ブランチに切り替えて、origin へ push しましょう。

% cd ~/gitroot/hp-example/
% git switch master
% git push -u origin master

-uオプションは、ローカルリポジトリの現在のブランチの upstream (上流) が origin の master ブランチであることを設定するために付けています。

ちなみに、前回の最後に「v0.1」というタグを打っておきましたが、上記のコマンドではタグはリモートに反映されません。タグはタグで push する必要があります。特定のタグを push するならタグ名を、すべてのタグを push するなら--tagsオプションを付けて push します。

% git push origin v0.1

または

% git push origin --tags

反映されたか確認する

GitHub 側に反映されたか確認します。GitHub にログインし、プロフィール画像 > [Your repositories] でリポジトリ一覧を表示し、hp-example リポジトリを開いてみます (図 3)。前回の記事で行った作業が反映されており、問題なさそうです。

図 3
図 3

ついでに clone できるかも確認しておきましょう。

% git clone git@github.com:mijinco0/hp-example.git ~/temp/hp-example/
% git log --oneline

おまけ: Bitbucket の場合

大まかな流れは GitHub とほとんど同じです。相違点だけざっくりと説明します。

ワークスペースとプロジェクト

  • Bitbucket には「ワークスペース」と「プロジェクト」という概念があります (もしかしたら GitHub にもあるのかもしれないけど、特に意識しなくても利用できてますよね)。
  • 最も大きな枠がワークスペースで、その中に複数のプロジェクトを入れることができます。プロジェクトの中には複数のリポジトリを入れることができます。
  • ワークスペースには ID があり、他人が所有するワークスペースも含めて、重複する ID を付けることはできません。
  • リポジトリの URL は「www.bitbucket.org/<ワークスペース ID>/<リポジトリ名>」となります。
  • Bitbucket にアカウントを作成すると、デフォルトでワークスペースが 1 個作成され、ワークスペース ID は自分のユーザー名となります。
  • ワークスペースを複数持つことも可能ですが、その場合も既存の ID を付けることはできません。

アカウント作成

Bitbucket のアカウントがなければアカウントを作成します。上にも書いたように、ここで決めたユーザー名がワークスペース ID やリポジトリの URL に影響しますので、念頭に置きましょう (まあその点は GitHub も同じですが)。

SSH の設定

  • キーペアのファイル名は、必要に応じて「id_ed25519_bb」のように末尾を変えて、GitHub 用と使い分けるようにしましょう。
  • ~/.ssh/config (すでに存在していたら追記してください)
      Host bitbucket bitbucket.org
              HostName bitbucket.org
              IdentityFile ~/.ssh/id_ed25519_bb
              User git
    
  • ~/.gitconfig (すでに存在していたら追記してください)
      [url "git@bitbucket.org:"]
          insteadOf = https://bitbucket.org/
    

公開鍵の登録

  1. Bitbucket にログインし、画面右上の歯車アイコンをクリックし (図 5 (a))、[Personal Bitbucket settings] を選択する (同 (b))。
  2. Personal settings 画面のメニューから [SSH 鍵] を選択し、[鍵を追加] ボタンをクリックする (同 (c))。
  3. SSH 鍵追加画面 (同 (d)) で各欄に次のように入力する。
    • Label: 自分で識別しやすいように好きな名前を付ける。例えば <クライアントマシン名>/<OS 名> など。
    • Key: 公開鍵ファイル (ここでは ~/.ssh/id_ed25519_bb.pub) の中身をコピペする。
図 4
図 4

Bitbucket に空のリポジトリを新規作成する

ワークスペースはアカウント作成時に自動作成されたワークスペースを使います。プロジェクト名とリポジトリ名はともに「hp-example」とします。Bitbucket におけるプロジェクトはまだ作成していませんが、ここで入力した名前で勝手に作ってくれるので、先に作っておく必要はありません。

  1. 画面上部のメニューにある [Create] をクリックして [リポジトリ] を選択する。
  2. [新規リポジトリの作成] 画面 (図 5) が表示されるので、下記のように入力する。
    • Workspace: 自分のユーザー名が自動入力される。
    • プロジェクト名: hp-example
    • リポジトリ名: hp-example
    • アクセスレベル: 今回は公開リポジトリなので、非公開のチェックをはずす。
      ※ 非公開リポジトリにする場合はチェックを入れる。
    • README を含めますか?: No
    • Default branch name: 空欄
    • Include .gitignore: No
  3. [リポジトリの作成] ボタンを押す。
図 5
図 5
これ以降の作業は GitHub の場合と同じです。

今回はここまで

最初は古典的な「ディレクトリ丸ごとバックアップ」から始まり、Git によるローカルでのバージョン管理を経て、GitHub に上げるところまでやると、なんだか肩の荷が下りたような安心感があります。

次回から 3 回に分けて、Tig という Git クライアント (というよりもリポジトリビューアといったほうが正しい) を紹介します。