Git入門:バージョン管理のきほん
リモートリポジトリと GitHub
この回でやること
origin が何者なのかという話から始めて、リモートリポジトリの登録と確認、HTTPS と SSH の違い、Personal Access Token と SSH 鍵の設定までを一本の道筋で理解しましょう。
- 読む 約 8 分
origin と毎回打っているのに、それが何かを知らない
ここまでは自分の PC の中だけで完結していました。ここからは他の人と共有します。リモートリポジトリの中身は手元とまったく同じ Git リポジトリで、置いてある場所がネットワークの向こう側というだけです。
そして origin です。これは Git の特別な機能でも予約語でもありません。リモートリポジトリの URL につけたあだ名です。
ターミナル
$ git remote -v
origin https://github.com/example/myapp.git (fetch)
origin https://github.com/example/myapp.git (push)左が別名、右が実際の URL です。git clone したときに Git がこの名前を自動でつけるので、全員が origin を使っている。それだけの理由です。
git init で作ったリポジトリには、まだリモートがありません。GitHub 側に空のリポジトリを作り、表示された URL を登録します。間違えたら set-url で上書きできます。
ターミナル
$ git remote add origin https://github.com/example/myapp.git
$ git remote set-url origin git@github.com:example/myapp.gitパスワードを入れても、push が通らない
いま 2 つの URL が出てきました。同じリポジトリを指しているのに形が違います。
https:// で始まるのが HTTPS で、Personal Access Token で本人確認します。git@ で始まるのが SSH で、手元の秘密鍵を使います。
HTTPS で push するとユーザー名とパスワードを聞かれますが、ログインパスワードを入れても通りません。
ターミナル
$ git push
remote: Support for password authentication was removed on August 13, 2021.
fatal: Authentication failed代わりに使うのが Personal Access Token です。GitHub が発行する長い文字列で、パスワード欄に貼り付けます。有効期限を決められる、権限を絞れる、何本でも作って片方だけ無効化できる、という点がパスワードと違います。生成された文字列は画面を離れると二度と表示されません。 その場でコピーします。
毎回貼るのは現実的ではないので、git config --global credential.helper osxkeychain で OS の資格情報ストアへ覚えさせます。トークンは実質パスワードなので、コードやチャットに貼らないでください。
鍵は通ったのに、まだユーザー名を聞かれる
SSH は、手元の秘密鍵と GitHub に登録した公開鍵のペアで本人確認をします。一度設定すれば以後は何も入力せずに push できます。
ターミナル
$ ssh-keygen -t ed25519 -C "taro@example.com"
$ ssh -T git@github.com
Hi taro-yamada! You've successfully authenticated.pub が付いたほうが公開鍵で、GitHub の SSH キーの設定に貼ります。秘密鍵はどこにも貼らず、誰にも渡しません。 ssh -T でこのメッセージが出れば認証は通っています。
多いのは、鍵を登録して ssh -T も成功したのに、git push すると相変わらずユーザー名を聞かれるという相談です。原因は、リモートの URL が https:// のままだからです。鍵は正しく、その鍵を使っていないだけです。認証で詰まったら、検索する前にまず git remote -v を打って、HTTPS と SSH のどちらを使っているかを確定させてください。
originは Git の機能ではなく、リモートの URL につけた単なる別名- HTTPS なら Personal Access Token、SSH なら鍵のペア。どちらも外に出さない
- 認証で詰まったら、まず
git remote -vでどちらの方式かを確かめる