Git/GitHub

Git

基本

コミット

ブランチ

リモート

GitHub

スタートアップ

操作

GitHub – SSH接続

概要

GitHubにローカル(Vagrant/CentOS7)からSSH接続を設定するのに、けっこう躓いてしまったので整理。GitHubに公開鍵をセットするのは当然として、ローカル側でいろいろ設定しないといけない。

流れは最後の「まとめ」に整理したが、概ね以下のような留意点あり。

  • ssh-addで秘密鍵を登録する必要がある
  • ssh-addに先立ってssh-agentを実行する必要がある
    • eval `ssh-agent’で実行する必要がある
  • SSHで扱うリポジトリーは、SSHでcloneする必要がある
    • SSH接続用のURLの書き方がある

鍵の生成

ssh-keygenで秘密鍵・公開鍵を生成する。

GitHubへの公開鍵の登録

  1. ヘッダーメニューのドロップダウンからSettingsを選択
  2. 左メニューからSSH and GPG keysをクリック
  3. SSH keysの”New SSH key”ボタンをクリック
  4. 公開鍵を貼り付け

SSH接続までのトライ・アンド・エラー

ターミナルでのアクセス~エラー

ssh -T コマンドでアクセスしようとしたところエラーになった。

ssh-addしてもエラー

参考サイトGitHubに接続できないときの対処法より、ssh-addするがエラー

ssh-agentが必要

参考サイトssh-addできなかったときへの対処よりssh-agentを実行するがうまくいかない。

直接実行しても内容が表示されているだけらしいので、同サイトにあるとおり、eval `ssh-agent'を実行してキーが追加された。

ターミナルでアクセス

ssh -Tを改めて実行し、(GitHubはシェルでのアクセスができないが)正しく認証されたことを確認。

既存リポジトリーのcloneができない

ここでGitHub上に既に存在するリポジトリーをcloneしようとしたが、パーミッションで拒否される。

クローン段階からSSHでもエラー

先の参考サイトGitHubに接続できないときの対処法の後ろの方を読むと、httpsでcloneしたリポジトリーはsshでは扱えないらしい。

そこでhttps認証に倣って以下のコマンドを打ってみるがうまくいかない。

SSH接続用のURLで接続成功

参考サイトベビーサンになりたいに倣ってURLを書いてみると、やっと接続できた。

別のマシンへの鍵の複製

これまでの流れで導入した鍵を別のマシンへ複製し、GitHubへ接続。

~/.ssh/下にあるid_rsaid_rsa.pubの2つのキーファイルをもう1つのマシンの~/.ssh/下にコピー。この状態でssh -Tで認証が確認できた。

ただし、cloneやpull/pushなどのコマンドを実行するたびにパスフレーズの入力を求められる。

そこで、ssh-agentssh-addを実行する。

これで毎回パスフレーズを入力する必要がなくなった。

まとめ

ひとまず、以下の流れでSSH接続を整理。

  1. ローカルに秘密鍵と公開鍵を生成
  2. GitHubに公開鍵を設定
  3. eval `ssh-agent`を実行
  4. ssh-add ~/.ssh/id_rsaで秘密鍵登録
  5. ssh -T git@github.comで認証成功を確認
  6. 既存リポジトリーをSSHでclone
    • git clone git@github.com:ユーザー名/リポジトリー名.git
  7. 以後、ワーキングディレクトリー内でSSHでpull/push

鍵のペアーを他のマシンに複製して同じアカウントにアクセスする場合、

  1. id_rsaid_rsa.pubを他のマシンの~/.ssh/ディレクトリーにコピー
  2. eval `ssh-agent`を実行
  3. ssh-add ~/.ssh/id_rsaで秘密鍵登録

 

Git/GitHub – 基本的な操作

概要

GitからGitHubにプッシュ・プルする手順。最初にリポジトリーを作成する場合、GitHub上にあらかじめリモートリポジトリーを作成しておいて、これをローカルにgit cloneで取り込む。

Gitのデフォルトブランチの変更

Gitのデフォルトブランチ名はmasterだが、GitHubがデフォルトブランチ名をmainとしたことから、Gitでもmasterからmainに変更するよう設定。

手順

  1. GitHubで共有するクローンを空の状態で作成
  2. GitでGitHubのリポジトリーをクローン
  3. Gitでローカルの開発過程をコミット
  4. GitからGitHubにコミット結果をプッシュ
  5. 以後、リモートリポジトリーからローカルにプル

GitHubで新しいリポジトリーを準備

GitHub上に新しいリポジトリーを作成。

  • リポジトリー名:test
  • Add a README fileを選択
  • 内容は1行で"My very first repository"

リモートリポジトリーのクローン

ローカルのワーキングディレクトリーにGitHubのリポジトリーをクローン。

GitHubで作成したREADMI.mdファイルの内容が確認できる。

ローカルでの変更とコミット

ワーキングディレクトリーに新たにsample.txtファイルを追加する。

そして追加したファイルをステージング、コミット。

Laravelなどのフレームワークの場合、.gitignoreで指定したファイルも併せて環境ごとpushした方がよいようなので、ステージングで以下のオプションを指定する。

git add -f .

GitからGitHubへのpush

git pushでコミットされた内容をプッシュ。

git push -u [URL] [branch]

[URL]はGitHubのリポジトリーのURLで、[branch]はリモートリポジトリーのブランチ。GitHubからcloneで複製したディレクトリー内の場合、git pushのみで実行可能。

コマンドを入力するとユーザー名とパスワードを聞かれるので、GitHubのユーザー名とパスワードを入力する。

これでローカルでの変更結果がGitHubのリポジトリーに反映され、GitHub上で変更結果を確認できる。

GitHubからGitへのpull

他で変更された可能性のあるリポジトリーで作業を開始する場合、リモートリポジトリーからプルする。

以下はGitHub側でREADME.mdの内容を編集した後に、ローカルでプルしている例。

 

GitHub – リモートパスワード認証の非推奨

パスワード認証の非推奨・停止

Gitでコミットした内容を、GitHubにpushするのにユーザー名とパスワードの入力したところ、問題なく内容は反映されたが以下のようなメールが届いた。

Hi @taustation,

You recently used a password to access the repository at taustation/hello-world with git using git/1.8.3.1.

Basic authentication using a password to Git is deprecated and will soon no longer work. Visit https://github.blog/2020-12-15-token-authentication-requirements-for-git-operations/ for more information around suggested workarounds and removal dates.

Thanks,
The GitHub Team

リモートでのパスワード認証が2021年8月13日以降できなくなるらしい。

さらに、GitHubへのサインインの認証を2要素認証に変更したところ、パスワード認証ができなくなった。

トークン認証

トークン認証への変更

  1. ヘッダーメニューのドロップダウンで”Settings”を選択
  2. 設定ページへ遷移
  3. 左メニューの”Developper settings”を選択
  4. 遷移後ページの左メニューで”Personal access tokens”を選択
  5. 右上の”Generate new token”ボタンをクリック
  6. New personal access tokenページへ遷移
  7. Noteのテキストボックスに、トークンの説明を入力
    • たとえば”For repository”など
  8. トークンの期限(Expiration)を設定
    • 無期限もあるが、有限にするのが望ましい
  9. scopeを設定
    • リポジトリーのpush/pull中心ならトップの”repo”にチェックで十分
  10. “Generate token”ボタンを押してトークンを生成

トークンを使った認証

改めてユーザ名とトークンを使ってGitの内容をpushする。

トークンの内容をコンソールに貼り付けても表示のフィードバックがないが、Enterキーを押して無事処理された。

SSH認証

SSH認証を設定すると、ユーザー名・パスワードの入力が必要なくなる。

  • ローカルで秘密鍵・公開鍵を生成
  • 公開鍵をGitHubに登録
  • ローカルで秘密鍵登録設定

 

GitHub – Hello worldガイド

スタートガイド~Hello world

ダッシュボードに表示されるHello worldガイドは、GitHub上でのリポジトリーの一連の操作を学習。

  1. リポジトリーの作成
  2. ブランチの作成
  3. コミット
  4. プルリクエスト
  5. プルリクエストのマージ

ダッシュボードページ

ダッシュボードページからHello worldガイドのページへ遷移する。

  1. “Read the guide”ボタンをクリック
  2. Hello worldページへ遷移

Step 1. Create a Repository

新しいリポジトリーを”hello-world”という名前で作成する。リポジトリーにはREADME.mdファイルのみが作成される。

ヘッダーメニュー

  1. 右上の”+”ドロップダウン
  2. New repositoryを選択
  3. Create a new repositoryページへ遷移

Create a new repositoryページ

  • Repository name: hello-world
  • Short description: 必要に応じて入力
  • Public: デフォルトでラジオボタン選択 (Privateは非選択)
  • Initialize this repository with: “Add a README file”をチェック
  • “Create repository”ボタンをクリック

Step 2. Create a Branch

mainに対してreadme-editsという名前でブランチを作成する。

  1. 新しく作成したhello-worldリポジトリーページ左上の”main”ドロップダウンをクリック
  2. “Find or create a branch …”のテキストボックスにreadme-editsと入力
  3. “Branches”タブの”Create branch: readme-edits from ‘main'”ボタンをクリック
  4. readme-editsブランチが作成され、左上のドロップダウンが”readme-edits”に変化
  5. その右のドロップダウンが”2 branches”に変化

Step 3. Make and commit changes

新しく作成したreadme-editsブランチのREADME.mdファイルの内容を変更し、変更内容をコミット。

  1. readme-editsブランチのREADME.mdファイルをクリック
  2. 右上のペンシルアイコンをクリック
  3. README.mdファイルの内容に行追加
  4. 下方の”Commit changes”にコミットの内容を追加
  5. “Commit changes”ボタンをクリック

Step 4. Open a Pull Request

ファイルを変更したreadme-editsブランチをプルリクエスト。

  1. readme-editsブランチ上方のPull requestsタブをクリック
  2. “New pull request”ボタンをクリック
  3. “readme-edits”をクリック
  4. 先ほどの修正内容であることを確認
  5. ブランチ作成時にコミット概要を書いていれば、それが反映されている
  6. Create pull requestボタンをクリック

Step 5. Merge your Pull Request

readme-editsブランチのプルリクエストをmainにマージ。

  1. “Merge pull request”ボタンをクリック
  2. “Confirm merge”をクリック

mainのREADME.mdファイルの内容が変更されているのが確認できる。

 

GitHub – サインアップ

サインアップの流れ

サインアップの流れは以下のとおり。

  1. GitHubサイトでサインアップを選択
  2. アカウント作成ページで必要情報を登録
  3. 職業などのバックグラウンド情報を登録
  4. 起動コードをメールで受け取って最終登録

GitHubサイト

https://github.co.jp/にアクセス

  1. 右上の”サインアップ”リンクをクリック
  2. Create your accountページへ遷移

アカウント作成

Create your accountページ

  1. 登録情報の入力
    • Username
    • Email address
  2. ロボットでないことの認証
  3. “Create account”ボタンでWelcome to GitHubページへ遷移

バックグラウンド登録

Welcome to GitHubページ

  1. 職業関係、プログラミング経験などのバックグラウンドに関する質問に回答
  2. “Complete setup”ボタン
  3. 起動コードが登録したメールアドレスに届く

起動コード入力・サインアップ完了

  1. メール本文の”Open GitHub”ボタンでコード入力ページへ
  2. 起動コードを入力してサインイン
  3. ダッシュボードページへ遷移

2要素認証の推奨

GitHubサインイン時、ユーザー名とパスワードに加えて6桁のコードの入力が求められる。

登録したアドレスに送られるメールでコードを得られるが、平文で危険あり、毎回メールが送信されるのも面倒。

GitHubでは2要素認証(two-factor authentication: 2FA)を推奨しており、スマートフォンのアプリと紐づけることでアプリからコードを得られる。

SMSも選択できるが、日本のキャリアには対応していないらしい。

2要素認証の設定はこちらに整理。

 

GitHub – 2要素認証

2要素認証の推奨

GitHub登録後にサインインしようとすると、”Device verification”を求めらるページに遷移した。6桁の端末認証コードの入力が必要で、登録したEmailに認証コードを送ったとのこと(20210803時点)。

Hey taustation!

A sign in attempt requires further verification because we did not recognize your device. To complete the sign in, enter the verification code on the unrecognized device.

Device: Chrome on Windows
Verification code: ******

この6桁のコード(Verification code)をブラウザーで入力すると、すぐにサインインした。

このメールでは以下のメッセージが続いている。

If you did not attempt to sign in to your account, your password may be compromised. Visit https://github.com/settings/security to create a new, strong password for your GitHub account.

If you’d like to automatically verify devices in the future, consider enabling two-factor authentication on your account. Visit https://docs.github.com/articles/configuring-two-factor-authentication to learn about two-factor authentication.

If you decide to enable two-factor authentication, ensure you retain access to one or more account recovery methods. See https://docs.github.com/articles/configuring-two-factor-authentication-recovery-methods in the GitHub Help.

1段落目は、もしサインインしようとしていないのにこのメールが届いた場合、パスワードが盗まれている可能性があることを示唆している。リンクをクリックすると、サインイン中ならパスワード変更のページに遷移する。

2段落目は、デバイスの認証を自動化したい場合には2段階認証とするよう示唆している。

3段落目は、2段階認証にする場合のリカバリー手順を保存しておくことを示唆している。

2要素認証の流れ

  1. スマートフォンに認証アプリをインストールする

設定

スマートフォンへの認証アプリのインストール

スマートフォンのGoogle Playで”認証システム”で検索してヒットするGoogle認証システムをインストール。URLは以下のとおり。

https://play.google.com/store/apps/details?id=com.google.android.apps.authenticator2&hl=ja

インストール後のアプリケーション名が日本語の「認証システム」なのでちょっと見つけにくかった。

GitHubの設定

  1. ヘッダーメニューのドロップダウンで”Settings”を選択
  2. 設定ページの左メニューで”Account security”をクリック
  3. 下方Two-factor authenticationセクションにある”Enable two-factor authentication”ボタンをクリック
  4. 遷移後のページで”Setup using an app”と”Set up using SMS”のラジオボタン表示
  5. appの方を選択し(デフォルト)、”Continue”ボタンをクリック
  6. Authentication verificationのステップになり、QRコード表示

認証アプリへのGitHubの登録

  1. 認証アプリを起動してQRコードをスキャン
  2. 6桁のコードが表示されるので、それをGitHubのブラウザーに入力
  3. リカバリーコードが表示されるのでダウンロードして保存
  4. “Done”ボタンを押して完了

設定後の認証

  1. GitHabにサインイン
  2. ユーザー名とパスワードを入力
  3. 6桁のコードを問われるので、アプリに表示されるコードを入力