gitとgithubをお洒落に使いこなす
archlinuxを使うライトな日曜プログラマーは、 開発に興味があるので、gitやgithubに手を出すものの、 それが仕事ではないので、毎日使うわけではなく暫くするといろんなことを忘れてしまい、すぐに、
「あれ、なんだっけ??」
と、呟くのです。
このノートは、普段、"I use archlinux btw."とか言ってるくせに、 githubアカウンや、gitのことになると、、、ゴニョゴニョ、、とかいうarchlinuxな人の秘密のページです。
もし、「僕、Githubにアカウントないんですけど、、、」って人がいるならば、以下のページも参考にしてください。
GitHubアカウントの作り方
gitのユーザー名とメールアドレス
gitでコミットすると、誰がしたのかがわかるように、名前とメールアドレスが書き込まれます。 そのため、gitを使う場合には、はじめにこの登録をしておく必要があります。 これらは、~/.gitconfigファイルに設定が書き込まれますが、 ファイルを直接編集せず、以下のコマンドで設定変更します。
$ git config --global user.name nekota
$ git config --global user.email nekota@example.com
初めての頃は、何処かの説明をみて適当にメールアドレスを入れているのですが、 github等を使うようになって、メールアドレスや名前が世界に公開されている事に気が付き 変更したくなることが有るかもしれません。
そもそも、俺ちゃんは何で登録してたっけ?って時のコマンドはこれです。
$ git config --list
実は、この名前やメールアドレスの設定は、デフォルト設定を表しています。 先のコマンドの「--global」オプションがそれを表しています。
一方で、gitの設定は、必要がアレば、リポジトリ毎に設定変更をすることが出来ます。 リポジトリに入ってから、以下のように--localオプションを付けて実行します。
$ cd a_awesome_proj
$ git config --local user.name nekomura
$ git config --local user.email nekomura@example.com
gitのuser.nameとgithubは無関係
ここで、もう一つ認識しておいたほうが、混乱を避けれることとして、 gitで登録する名前やメールアドレスは、githubアカウントとは直接には何の関係もありません。 gitのバージョン管理において誰がコミットしたのかを表す文字列として記録される時に用いられるだけです。
https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git
githubでのリポジトリの作り方はクローンでOK
github上でリポジトリを作る時、どうしていますか? 巷のHowToをみると大体次のように説明されています。
- githubのweb上でリポジトリを作成
- ローカルで、リポジトリにしたいディレクトリでgit init
- ローカルで作成したリポジトリのリモートにgithubリポジトリを紐付け
- pushする
しかし、なにか厳密な事情がない限り、githubのweb上でリポジトリを作ったら、 それをcloneして、ローカル側のリポジトリにすればOKです。 gitとしてのリポジトリ初期化やリモートの情報をわざわざ自分で登録する必要がなくなります。 つまりは、次のような感じ。
- githubのweb上でリポジトリを作成
- ローカルにクローン
- ローカルのリポジトリに色々突っ込んでファーストコミット
- pushする
リポジトリ作成時に、README等の作成をせずに、空っぽのまま作成すると次のような画面になります。
Quick setupのhttpsをsshに切り替えて、コピーボタンを押しましょう。
そして、ターミナルにgit clone
と書いた後ろにコピペします。
上記の例ならば、コマンドは以下のようになります。
$ git clone git@github.com:nekolinuxblog/nekolinuxblog.github.io.git
これを実行すると空のリポジトリがクローンされます。 一方、リポジトリ作成時に、ライセンスやREADMEを自動作成した場合には、通常通り、緑の「Code」ボタンがでるので、 そこをクリックして「ssh」を選択後、URLをコピー、ターミナルのgit clone の後ろにペーストで、 クローンします。
githubを使うならssh認証
githubのアカウントを作ったら、ssh鍵登録は先ずやっておくべきマスト事項です。 そしてこのことは、アカウントを作ったときには、大体の人は、何処かのHowToを見て設定していると思います。 例えば、githubのドキュメントなら以下にあります。
Adding a new SSH key to your GitHub account
sshでの認証について、頭で理解したい人は、arch wikiが割とわかりやすく書かれているので目を通してみましょう。
SSH 鍵 arch wiki
ssh鍵の登録
archlinuxの場合、必要なパッケージのインストール。
$ sudo pacman -S openssh
次のコマンドで鍵を作成します。 鍵作成のための質問が幾つか有るので、適当に答えます。 質問への答えがデフォルトで良ければ、単にリターンキーを押していくだけで、作業は進みます。 パスフレーズについては、家では設定していません。(パスフレーズで何が暗号化されるのかはarch wikiを読んでみましょう)
$ ssh-keygen -t rsa
鍵は、~/.ssh/以下に作成されます。 そのうち、~/.ssh/id_rsa.pubの内容が公開鍵なので、 これをgithub側に登録します。
ここで、今度は、githubにwebからアクセスして自分のアカウントにログインします。 自分のページが開いたら、右上、自分のアイコンをクリックして出てくるメニューから「Settings」を選択します。 そうすると、設定のページに切り替わるので、そのページの左に並んでいるメニューから 「SSH and GPG keys」をクリックしましょう。
SSH Keysと書かれたタイトルの右にある、「New SSH Keys」と書かれ緑色のたボタンをクリックします。
切り替わったページで、Titleには、どのパソコンのどのアカウントの鍵かが分かる名前を適当に書き、 keyの部分に、~/.ssh/id_rsa.pubの内容をコピペします。
最後に、下にある「Add SSH key」と書かれた緑のボタンを押せば完了です。 これで、ssh接続でリモートに簡単にpushすることが出来るようになります。
ssh認証ってなんだっけ?
しかし、一番はじめに、いっかいやるだけなので、日曜プログラマーは、大体、上記で行った作業のことを忘れてしまうものです。
そして、問題がおこるのは、しばらくしてからです。
まず、クローンする時になんとなく「https」を選んでしまった時に起こります。 ローカルでリポジトリを更新し、いざ、pushすると、アカウント名とパスワードを尋ねられます。 しばらく前までなら、「あれ?前はこんなの打ち込んだっけ?」と言いながら、 面倒くさいながらもgithubアカウントのユーザー名とパスワードを手動で打ち込めばとりあえずpush出来ました。
しかし、現在は、githubアカウントの「パスワード」を受け付けてくれず、pushに失敗します。 実は、httpsアクセスの場合、「トークン」というものを事前に、githubの設定ページから取得して、 これをパスワードの代わりに入力する必要があります。
httpsとsshは認証の仕方が違う
この時点でこの問題に当たる場合、そもそも「https」と「ssh」という認証の選択肢があることを認識していないことが問題です。 まず、githubのwebページからクローンするボタンにある「https」と「ssh」違いがあることを認識します。
もし、リポジトリの内容を使いたいだけで、更新してpushする予定がない場合。 すなわち、他人のリポジトリ等をダウンロードして使うような場合は、httpsでOKです。 一方、自分のgithubアカウントのリポジトリをクローンする場合は必ずsshでクローンするように意識します。 もちろん、前提として、ssh鍵をgithubの自分のアカウントに登録しておかなければなりません。
新しいパソコンでssh鍵を登録
もう一つ、問題が起こるパターンとしては、 新しいパソコンや新しいアカウントからgithubを利用する場合です。 ssh認証は、ローカルアカウント毎にssh鍵をgithubに登録しておく必要があります。 先に述べたとおり、githubアカウントを作ったときには、 同時に、意味がわからなくても、ssh鍵設定をHowTo見ながら設定している人が多いですが、 暫くすると、そういうことをした事自体忘れてしまいがちです。
新しいアカウント、パソコンを設定するときには、githubへのssh鍵登録をなんとなく思い出しましょう! (パソコン間のssh接続もあるので、きっと思い出せます)
しなければならない!ということさえ思い出せば大丈夫。 ssh鍵の登録作業自体は、超簡単です!すぐ出来ます!億劫になって後回しにする必要はありません。5分できっと終わります。 このページを含めて、githubにssh鍵をとお録するやり方をわかりやすく説明しているページを 把握しておけば、大丈夫!
更に、蛇足ですが、、 巷には、「githubの複数アカウントを切り替えて活用」というノートも多く見ますが、 日曜プログラマは、ローカル1アカウントにgithub1アカウントの単純な構成にしておくのが吉です。
lazygit
windowsでは、githubのアプリである、「github desktop」が使いやすくて好きだったのですが、 linuxでは「lazygit」を使っています。 なぜかといえば、lazygitはコンソール上で動くアプリなので、Xmonadと見た目の相性が良いのです。
使ってみたい?
$ sudo pacman -S lazygit
配布元は以下です。
https://github.com/jesseduffield/lazygit
No comments: