GitHubにHTTPSで接続する(※Fine-grained追記)(Windows, Git Credential Manager)


# 1. はじめに

githubを久しぶりに利用しようと思ったのですが、HTTPSでのpushでつまづいたため、その対応を記録するついでに、設定方法をメモしておきます。

:::note info
(2024/12)
発行していたトークンが失効するため、Fine-grainedでの再発行・登録の手順を追加
```
[GitHub] Your personal access token (classic) is about to expire
Hi @*******,

We noticed your personal access token (classic) "*******" with read:org, repo, and workflow scopes will expire in about 18 hours.

If this token is still needed, visit https://github.com/settings/tokens/************/regenerate to generate an equivalent.

If you run into problems, please contact support by visiting https://github.com/contact

Thanks,
The GitHub Team
```
:::
# 2. 概要
* githubのリポジトリへコードをpushする
* githubへの接続は「HTTPS」を利用し、「ssh」は使用しない
* HTTPS接続では、「トークン」を発行して接続する
* 「トークン」は端末に保存して使用する

# 3. 確認した環境
* Windows10
* Powershell
* git version 2.43.0.windows.1

# 4. GitHubのリポジトリ作成
## リポジトリ作成
Privateで作成しました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/d41d5476-9924-d62d-68a8-8faf82b01aa2.png)

githubリポジトリの作成後画面
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/27c3bda8-7c46-d05a-a961-0959e28b5d94.png)

# 5. 表示されたコマンドの実行
リポジトリ作成時に案内されるコマンドは以下になります。
```
echo "# (リポジトリ名)" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M main
git remote add origin https://github.com/(githubのID)/(リポジトリ名).git
git push -u origin main
```
表示されたコマンドをそのままの順で実行すると以下のエラーがでました。
(HTTPSで接続したはずなのに、なぜssh?)
```
> git push -u origin main
ssh: Could not resolve hostname github: Name or service not known
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
```
git remoteの状況を確認します。pushの方がHTTPSの記載にはなっていませんでした。
```
> git remote -v
origin  https://github.com/(githubのID)/(リポジトリ名).git (fetch)
origin  github:(githubのID)/(リポジトリ名).git (push)
```
.gitconfigにて以下の記述を入れていたことが原因のようでした。なぜいれたのかは記憶がなく、接続方式を変換するための記述のようでしたので、この記述を消しました。
```
[url "github:"]
    pushInsteadOf = https://github.com/
    pushInsteadOf = git@github.com:
```
一度、remoteの設定を消して、再度設定します。両方、HTTPSのURLになりました。
```
> git remote rm origin
> git remote add origin https://github.com/(githubのID)/(リポジトリ名).git.git
> git remote -v
origin  https://github.com/(githubのID)/(リポジトリ名).git (fetch)
origin  https://github.com/(githubのID)/(リポジトリ名).git (push)
```
再度pushしようとすると以下のようにサインインが表示されました。
（ここでは一度中断しておきます。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/08eee595-6c0a-837e-0660-5c601f104df6.png)

# 6. GitHubのアクセストークン発行・保管・削除方法
HTTPS接続にはアクセストークンの発行が必要なので、GitHubの画面から発行します。

## トークンの発行
:::note warn
こちらの方法は「classic」となっているので、いずれ使えなくなる可能性があります。問題なければ後述の「Fine-grained」で作成した方がよいと思います。
:::
「Settings」⇒「Developper Settings」から「Personal access tokens」を選択し、「Generate new token」から発行します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/9041afcd-16da-7b3c-1834-9b23e95643ed.png)

NoteとExpiration(有効期限)を入れます。スコープ(Select Scopes)は最低限必要な「repo」と「workflow」、「admin:org」にある「read:org」にチェックを入れて作成します。（他にも必要であれば追加してください。)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/506a4117-2da8-326e-0222-ac96c30ed2c8.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/30f5fcd6-fef5-82d0-9d06-bbc041a5f80a.png)


トークンが発行されるので、コピーしておきます。（ここでしか表示されないので要注意)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/3cc191fc-92de-6911-d3aa-33d11106cb97.png)

左メニューのTokens(classic)を再度押すと、以下のように発行したものが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/36a156a0-71ca-7f1a-03c5-88b8cbf6b794.png)


## トークンの発行(Fine-grained)
以下を見ると、Fine-grainedという新しい方法がpreviewになっており、こちらに移行していくものと思われます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/c4f17ced-03d0-2a1d-1ead-155cad73a022.png)


https://docs.github.com/ja/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens#personal-access-token-%E3%81%AE%E7%A8%AE%E9%A1%9E

トークンの名前、設定したい対象のオーナー、有効期限を設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/d5a42876-7ace-8769-0849-cb77b49a085c.png)

設定したいリポジトリの対象を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/bc05082d-e36b-181b-1205-9a5ae9da0726.png)

Repository permissionsとAccount permissionsがありますが、最低限としてContentsをRead and Writeにしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/97da7569-2808-e4ad-a5fe-04ff7c55ab0c.png)

Metadataは必須項目のようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/bbcf05f2-9c36-1117-9db0-80ad8dda7e19.png)

指定したものがOverviewに表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/c740c7cb-9eaf-1f86-f2f4-4f52887f86b1.png)

「Generate Token」を押すと以下のようにトークンが発行されます。
この画面でしか表示されないので、コピーしておきます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/d60b356e-2c8e-62a5-700b-f4800a100da2.png)


## 認証情報の保管場所と削除方法
認証情報を端末に保管する方法はいくつかあるようですが、Git Credential Managerで保存することにしました。
https://docs.github.com/ja/get-started/getting-started-with-git/caching-your-github-credentials-in-git

gitをいれた時に入っていたようです。
```
> git credential-manager --version
2.4.1
> git config --show-origin credential.helper
file:C:/Program Files/Git/etc/gitconfig manager
```
### 利用方法
初回にGitHubの操作を行った際、サインインが出るので、Tokenを選択して発行したトークン文字列をいれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/ba53a90b-de8d-37e7-96a4-22433e3fb171.png)

以降、こちらの認証情報が使用されるようです。

### 認証情報が保存されている場所
認証情報はWindowsの資格情報マネージャー(Windows Credential Manager)に保管されているようです。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/d9d84883-c604-ef6e-35b0-ffbd1da1324b.png)
Windows資格情報の方にあります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/176c6442-24ad-b5bc-7e4f-0690aae86c24.png)

汎用資格情報の中にgithubの認証がありました。こちらの登録を削除すると再認証が必要になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/6d7a8eb5-b48e-7a96-ceae-24a505bcea5b.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/9b27de77-368c-4dcc-2dd4-028622c7bbb6.png)

## 認証情報の変更方法(トークンの更新)

Windows資格情報マネージャーで該当に項目を表示し、「編集」を押します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/309202/e115385d-c840-a494-bd5d-84a286ea2704.png)

コピーしておいたトークンをパスワードに貼り付けて登録します。