GCMを途中で諦めてghコマンドをインストールした
要点まとめ
ghインストールはこちらのinstallコマンドを1行ずつ実行する
作成するtokenの必須権限は'repo', 'read:org', 'workflow'
gh auth login で認証スタート。
認証中の質問はGitHub.com, HTTPS, Y, Paste an authentication token と答えて最後に作ったtokenをコピペ
ghでログイン後にgitコマンドでGitHubと通信できなかったら下記コマンドを実行
gh auth setup-git
きっかけ
ubuntuでgitを使ってて、GitHubのPATを平文保存はなぁ、どうしよう、と思ってはいたものの、調べたけどなんだか難しそうで、まぁ個人PCだし誰も見に来ないだろうと諦めて
git config --global credential.helper store
してました。
久々にgit使おうとしたらPATの期限が切れてたのでいい機会だと思ってトークンどうするのがいいんだろうと思ってまた調べた結果、普通にghコマンドになったというお話。
GCMでやってみたい(諦めた)
Caching your GitHub credentials in Gitを見ると GitHub CLI (gh)か Git Credential Manager (GCM)の2択のようです。
なんとなくGCMの方が汎用的なこと覚えられそうでいいかな?と思ってこちらの導入を目指しました。
(結果今の自分の知識では手に負えなくて諦めたんですが・・・)
ghをどうやって使えるようにするのかだけ知りたいんだよという方はこの章はスルーしてください。
何で保存する?
curlがインストール済みならExperimental: install from source helper scriptに書いてあるコマンド実行するだけでインストールは問題なく行くかと思います。
curl -LO https://raw.githubusercontent.com/GitCredentialManager/git-credential-manager/main/src/linux/Packaging.Linux/install-from-source.sh &&
sh ./install-from-source.sh &&
git-credential-manager-core configure
問題はここからで、何でcredentialを保存するかを決めないといけないです。
Linuxでつかえるのは以下のようです。
このうちPlaintext filesは安全じゃないみたいなので却下。
Git's built-in credential cacheは一時保存されるだけみたいなので却下。
残るはfreedesktop.org Secret Service APIとGPG/pass compatible filesなのですが、ここでSecret Serviceを選択すればおそらく平和的に終わってました。
Secret Serviceを選びたくなかった理由はGUI必須だったため。ubuntuなのでできるんでしょうがCUIだけで完結したいという謎のこだわりのせいで却下しました。
するともう選択肢はGPG/pass compatible filesしかないんですよね。
しかもHeadless/TTY-only sessionsにも当てはまるはず?(よくわかってないけど)。
GPGとはなんぞや?を調べてる途中でこれはすぐには理解できそうにないや、と諦めることにしました!
GitHub CLI(gh)の導入
インストール
もうstoreでいいかなとも思ったのですがせっかくなのでghも試しにやってみることにしました(調べた結果CUIのみでできそうだったので)。
ちなみにGCMインストールしたときに~/.gitconfigにいろいろ追記されちゃってたので一旦コメントアウトして、認証情報もクリアしました。
が、実際にはクリアした気になってただけだったっぽい?です。
(正直credential.helperの動きがよくわかってない。。)
多分~/.gitconfigは下記みたいな感じになってたと思います。
生きてるhelper=のところが自信ないですが多分ここがeraseだと悪さしそう?な気がします。
[user]
name = dumako
email = ****@***.com
[credential]
helper = erase
# helper =
# helper = /usr/local/share/gcm-core/git-credential-manager-core
[credential "https://dev.azure.com"]
useHttpPath = true
Installing gh on Linux and BSDのインストールコマンドは4行一気に貼り付けるのではなく1行ずつやったほうがいいかもしれないです。
curl -fsSL https://cli.github.com/packages/githubcli-archive-keyring.gpg | sudo dd of=/usr/share/keyrings/githubcli-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/githubcli-archive-keyring.gpg] https://cli.github.com/packages stable main" | sudo tee /etc/apt/sources.list.d/github-cli.list > /dev/null
sudo apt update
sudo apt install gh
バージョン表示されればインストールは大丈夫かなって。
$ gh --version
gh version 2.9.0 (2022-04-26)
https://github.com/cli/cli/releases/tag/v2.9.0
PATの準備
そんな小難しいことはするつもりがなかったので最低限の権限にしました。最低限とは下記のようです。
workflowはもしかしたら必須じゃないかもしれないです。コマンドに従って出てきたのは上記なのですが、下記マニュアルには表記がなかったです。
このことには後で気づいたのでworkflowも付与しちゃいました。
ログイン
オプション無しで素直にやりました
$ gh auth login
? What account do you want to log into? [Use arrows to move, type to filter]
> GitHub.com
GitHub Enterprise Server
GitHub.comでEnter(この>はカーソルキー↑↓で動かせます)
$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? [Use arrows to move, type to filter]
> HTTPS
SSH
HTTPSでEnter
$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? (Y/n) Y
Yと打ち込んでEnter
$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? [Use arrows to move, type to filter]
Login with a web browser
> Paste an authentication token
Paste an authentication tokenでEnter
(デフォルトはLogin with a web browser)
$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: ****************************************
さっき作ったtokenをコピペしてEnter
$ gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Paste an authentication token
Tip: you can generate a Personal Access Token here https://github.com/settings/tokens
The minimum required scopes are 'repo', 'read:org', 'workflow'.
? Paste your authentication token: ****************************************
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as dumako
ログインできましたねー。
多分普通にやったらここでおしまいなのでしょうが私はいろいろ試してしまった結果(?)問題がおこりました。
gitコマンドがGitHubと通信できない
ログイン後に試しにfetchしたら認証が走りました。
$ git fetch
git: 'credential-erase' is not a git command. See 'git --help'.
Username for 'https://github.com':
ghの方はちゃんと動いてそうです。
$ gh label list
Showing 9 of 9 labels in dumako/c_lang
bug Something isn't working #d73a4a
documentation Improvements or additions to documentation #0075ca
duplicate This issue or pull request already exists #cfd3d7
enhancement New feature or request #a2eeef
help wanted Extra attention is needed #008672
good first issue Good for newcomers #7057ff
invalid This doesn't seem right #e4e669
question Further information is requested #d876e3
wontfix This will not be worked on #ffffff
よくわからないのでstoreにしてみたら認証は走らなくなりました
$ git config --global credential.helper store
$ git fetch
$
???
と思ってhomeを確認したらありました、.git-credentials。。
$ ls -a ~/
. .bashrc .gitconfig
.. .cache .gitconfig.bak
.aws .config git-credential-manager
aws Desktop .git-credentials
.bash_history Documents github
.bash_logout Downloads .gnupg
これはいらないはず。rmしました。すると
$ git fetch
Username for 'https://github.com':
やっぱり認証走りました。ghでログインしてもgitにはその認証引き継がれない?と思ってました。今見返すとログインするときに
Authenticate Git with your GitHub credentials? (Y/n) Y
としてるので正常だったら連携されるのかもしれないですが、少なくとも私はできてない状態でした。
gitと連携させる方法がわからず困りました。
いろいろ見ていった結果たどり着いたのが下記でした。
解決
英語なのでちゃんと何言ってるかはわからないwのですがとりあえずコマンドは用意されているようです。
というわけで下記のコマンドを実行。
$ gh auth setup-git
すると~/.gitconfigが下記のようになりました。
(多分その前にいろいろしててコメントアウトとか[credential "https://dev.azure.com"]のところとかは消してしまってた模様。。)
$ cat ~/.gitconfig
[user]
name = dumako
email = ***@***.com
[credential]
helper = store
[credential "https://github.com"]
helper =
helper = !/usr/bin/gh auth git-credential
[credential "https://gist.github.com"]
helper =
helper = !/usr/bin/gh auth git-credential
helper = storeは残るんですね。(ようわからん)
何はともあれこの状態でもfetchが通ることが確認できました!
めでたしめでたし。
$ cat ~/.git-credentials
cat: /home/dumako/.git-credentials: No such file or directory
$ git fetch
$
感想
GPGを理解したい
いつかGCM設定リベンジしたい
gitconfig理解したい
linuxもちゃんと勉強しなきゃ・・・
英語も勉強しなきゃ・・・
うーん、課題だらけ。。
ところでghコマンドはどこにtoken情報をもってるんですかね??