標準愚痴出力

個人的なIT作業ログです。もしかしたら一般的に参考になることが書いているかもしれません(弱気

GitHub のアカウントの名前を変更したら起きること

こちらの記事のリポートが参考になるが、それでもいろいろと想定外のことがあったので、記しておきたい。

正直失敗はしたくなかったので、それなりに備えた上で実施に踏み切った。だが白状すると、やはり想定外の問題もあったことはあった。

当初の方針

  • OAuth で連携しているところについて、ログイン手段が失われないようにする(事前に調査)
  • 旧アカウント名は誰かに取られてややこしいことになるのは嫌なので、同名の organization を作って、占有しておく。
    • とはいえ、空っぽの organization も寂しいので、Starをたくさんいただいている一部のレポジトリと archived なレポジトリは organization へ移しておく(→ この目論見はうまくゆかなかった)

事前準備:OAuth 連携先の切り替え

別に転職するつもりとかはなかったけれども、客観的な評価がほしいなと思って、いくつかの転職サービスに登録していた。これらは OAuth で GitHub でログインしているものもある。

どこへ登録していたかはほとんど忘れていたが、GitHub の方から調べることができる。Setting → Apprications → Authorized OAuth Apps で一覧できる。

これらの対応だが

  • GitHub の OAuth 以外(メールアドレス・別の OAuth)の手段でログインできるものは、そちらでログインできるようにしておく
  • GitHub でしかログインできないものは、個別に確認

でいく方針を立てた。結果、ほとんどのサービスは別のログイン方法を用意していたので、そちらでログインを出来るよう設定・確認した。

唯一の例外は Findyで、このサービスは GitHub でしかログインできない。で、問い合わせフォームから聞いてみたところ『アカウント名を変えてもログインは可能、ただしログインした後「再連携」が必要なので、プロフィールのアカウント設定画面で再連携のボタンを押せばよい』とのこと(ご回答ありがとうございました

で、アカウント名変更を

Settings → Account → Change username → …

やっちまった!

プロフィールレポジトリの変更

プロフィールレポジトリは、アカウント名と同じレポジトリなので、移行後は対応付けが外れてしまう。これは単純に GitHub の設定からレポジトリ名を新しいアカウント名と同じものに変えるだけでよい。

それプラス、readme.md の中の URL の書き換えだ。だが、それを行うには git push をしなくてはいけない。

ローカルレポジトリの remote の URL を変更する

全てのレポジトリでいちいち Git コマンドを発行してられないので、半自動化するためこういうバッチファイルを作った

@echo off
for /F %%I in ('git remote show') do set "REMOTE=%%I"
for /F "tokens=3" %%I in ('git remote show -n %REMOTE% ^| findstr Push') do set "URL=%%I"

set "URL=%URL:zetamatta=hymkor%"

@echo on
git remote remove "%REMOTE%"
git remote add "%REMOTE%" "%URL%"

レポジトリのあるディレクトリをカレントディレクトリにして実行すると、リモートレポジトリの URL が新アカウント名のものに書き換えられる。

OAuth 先はどうなったか

アカウント変更後に Findy にアクセスしてみたところ、前回ログアウトしていなかったので、普通に大丈夫だった (まぁ、確かに普通そうだわな。でも、頭で分かっていても、プログラマなので逆に心配なのよ。すべてのサービスが合理的に設計されているとは限らないので)

他、zenn と Paiza にもアクセスしたが、特に問題なし。ここまで問題がないと面倒臭くなって全部調べるのをやめた…

そして予想外のこと

旧アカウントと同じ名前の organization を作ることは出来たが、そこへレポジトリを移せない。

Setting → Transfer Owership から organization への移譲を実行しようとしても、

Repository name zetamatta/expect has been retired and cannot be reused

というエラーで却下されてしまう。理由は何となく察していて「なりすまし」防止のためなのだろう。 とはいえ、一応、公式ドキュメントらしき

というページにこういう記述があるから大丈夫と思ったんだがなぁ。

おそらく、これ記述が古いんだろうな!たぶん本来削除されるべきものが見えるところに出てしまっていた、もしくは過去バージョンなのかもしれない。URLもやたら長いし。


ググってみると、こういうケースの場合 GitHub のサポートに連絡して、「なりすまし」でないと説明できれば、制限を外してもらえるようだ。でも、そこまでする必要あるかなぁ

  • 古いアカウント名の URL へのアクセスは新アカウント名へ自動的にリダイレクトしてくれるので、アプリケーション・ライブラリユーザへの配慮という点では、それほど必要ではない
  • もっともメジャーなレポジトリについては、すでに別の organization に移譲済み。
  • そもそも古い URL を維持したいと思った理由は、単に「旧アカウントを別の人間にとられないように作成した organization が空っぽなのは寂しい」といった、あまり合理的な理由ではない(そして、いずれは新アカウントにまた戻すことも考えていた)

以上を鑑みれば、無理に移譲する必要もないな!(ということで、すっぱりあきらめた)

その後

まぁ、アカウント名を変える前は「今後、ずっとモヤモヤした気持ちを抱いてゆくなら、思い切って気持ちよく変えた方がいいだろう」と思っていたが、実際変えてみると何ともいえない「やっちまった」感が湧いてきてしまった。なんといっても10年ほど使ってきたアカウント名だしなぁ。

とはいえ、ブロックされまくりの汚れ twitter アカウントと別の名前にすることにより、これで表の世界でレポジトリをアピールできるようになったと思うと、やはり正解だったのだろう(と思いたい)