概要
GitHubのリポジトリへSourceTreeからアクセスする場合に、OAuthだと操作の度にアカウント選択画面が出て不便です。そのためPATを発行して認証しようとしたのですが、SourceTree(Windows)でPATを入れても認証失敗してしまい、なかなか上手く行きません。けっきょく、個人ユーザーの認証とOrganizationの認証それぞれで別の解決方法が必要になりました。それを紹介します。ちなみにPAT以外でも解決できたのでそれも補足します。
最初に結論まとめ
個人ユーザーのリポジトリ
PAT発行時に、Account permissionsのEmail-AddressのRead権限を割り当てる必要があります。それで解決です。
Organizationのリポジトリ
SourceTree自体では解決できませんでした。Cloneする時にリモートリポジトリのアドレスに次のようにPATを含めることで、ローカルリポジトリに認証情報を残すことで解決はできます。
https://<ユーザー名>:<PAT>@github.com/<YourOrganization>/<YourRepository>.git
ただしこれはローカルリポジトリへコマンドを打てばPATが見えてしまうので、用途に求められるセキュリティ次第だと思います。
Basic認証
PATとは別の話ですが・・・設定画面でOAuth認証を登録せず、認証情報が無い状態でClone等からアクセスしてBasic認証すれば、何度もダイアログが出てくる問題は解決できました。
説明
上手く行かなかったこと
GitHubのOrganizationで管理しているPrivateリポジトリへ、SourceTree(Windows)からアクセスしたいことって、ありますよね。ないという幸運な人はたぶんこの記事をスキップしてもらってOKです。
SourceTreeの設定画面からOAuthで登録すると、こういうダイアログで登録することになります。
これ自体は問題ないのですが、選択を記憶してくれないのか、push,fetchなどGitHubのアクセスが必要な操作をする度にこのウインドウが出てきます。これはけっこう手間です。
他のもっと手間の掛からない方法はないのかと模索したところ、PATを発行してSourceTreeへ登録するしかなさそうです。※後で書きますが、Basic認証での解決方法もありました
PATの手順は色々なWebサイトで紹介されているのでそれに従って
- GitHubで新しい方の「fine-grained personal access token」を作成
- パーミッションはリポジトリの「Contents」のRead/Writeを許可
- SourceTreeの設定画面の認証でこれを入力
個人ユーザーのPAT
個人ユーザーのPATについては、さらに「Account permissions」の「Email-Address」のRead権限を追加したら、同じ操作で認証成功しました。
そういう手順が必要だという情報は見かけなかったのですが、Atlassianのフォーラムで「user情報の読み込みが許可されているか」という一言があったので気付きました。
しかしこれでは、個人ユーザーで所有しているリポジトリにしかアクセスできません。OrganizationのリポジトリにアクセスするにはOrganizationのPATが必要です。
OrganizationのPAT
同じように解決できるかと思いましたが、ダメでした。試しに全ての権限をRead許可しても結果は変わらないので、こちらはパーミッションの問題ではないようです。記事を書いておいてなんですが、SourceTreeで認証を通す方法はまだ見つけられていません。
代わりに、SourceTreeではなくローカルのリポジトリ側で解決する方法を見つけました。
Cloneする時のURLに次のようにしてユーザー名とPATを含めることで、PATで認証を通すことができます。
https://<ユーザー名>:<PAT>@github.com/<YourOrganization>/<YourRepository>.git
例えばhttps://contoso/rep.git
を使いたい場合は、git clone https://username:github_pat_xxxxxxxxxxxxxxx@github.com/contoso/rep.git
といった感じです。
この方法ならば、SourceTreeかどうかなどのgitクライアント側の事情に関係なく、このリポジトリを操作する時は認証が通ります。
この場合はCloneしたローカルのリポジトリに情報が記録されますので、git remote -v
等でも値を見ることができます。セキュリティ的にいまいちな感じもありますが、ローカルにだけ保存されるものではありますし、万一の場合はPATなので失効させることもできますから、これで許容可能というケースも多いと思います。
おまけ:OAuthでの認証の別案
SourceTreeの設定画面から認証情報をOAuthで登録すると、前述のように何度もダイアログがでてきます。
認証情報を登録せず、Clone画面などから直接アクセスすると、次のようなログイン画面がでてきます。こちらでログインすればBasic認証として登録され、何度もダイアログが出てくる問題は解決するようです。PATについてはここまでに書いたとおりですが、PATを使わない解決策としてはこれで良さそうです。
まとめ
SourceTreeへのPATの設定程度ならあちこちに情報があるし簡単だろう、と思ったら意外に手間取りました。欠点もあるもののいちおう解決策にたどり着いたので、同じ事に引っかかっている人がいたら参考になると嬉しいです。