| @WWW

| @技術/プログラミング

会社で使ってる GitHub のプライベートリポジトリで master ブランチに対して出てる Pull Request を Merge したらコードが消えるという珍事があった。ファイルを削除する commit とかないにもかかわらず、全消しされてしまった。ちなみに同じ Merge を手もとでやるとコードが消えたりはせずちゃんと Merge された。極めて謎な現象だった。

master ブランチが空になるとデプロイができなくなって不都合があるので( Webistrano 上でデプロイするとき master ブランチからしかデプロイできないようなレシピになってる)、コードが消滅したブランチを bukkowaremaster にリネームして手もとで Merge したブランチを force push してしのいだ。

GitHub に問い合わせてみたところ、ぬるい感じの一次返信が来たので原因教えて欲しいと送った。すると今度は別の人( Jeff King という人物)から返事が来た。名前でググったら git のコミッターだった。どうやら大事みたいだ。

We are still tracking down the exact cause of the problem you experienced, but we believe it is related to an unchecked error condition in git that triggers only occasionally (it does not reproduce reliably on your repository, and over all of our repositories over the past few years, yours is only the second instance we have seen).

In the meantime, we've put additional checks into the merge process to sanity-check the result. This should help us narrow down the root cause, but more importantly, it will prevent such a bogus merge from being presented to the user (we will catch the error and retry it).

I hope that addresses your concern.


(以下拙訳)

引き続き問題の原因を調査してるけど、これは git の unchecked error condition に起因する問題だと思っています。(再びあなたのリポジトリで同じ問題が起こることはないはずです。ここ数年間でこの問題に遭遇したのは GitHub の全リポジトリでもあなたのケースが 2 例目です)

一方で、 Merge のプロセスにはもっと厳密なチェックを追加するようにしました。このことで問題の原因を絞り込むことができますし、さらに大事なことに、今回のような空の Merge をユーザーの目にさらすことがなくなります(問題があれば我々が事前に察知し、 Merge を再実行します)

この対応であなたの懸念を解消できるのではないかと思います。

unchecked error condition ってのが何なのかがよく分からなくて、軽くググってみたら例外キャッチできなくて死ぬ現象で、セキュリティ上の懸念事項っぽい( CWE - CWE-391: Unchecked Error Condition (2.5))。

「 Pull Request を Merge したらコードが消えました」と聞かされたときは、冗談か何かかなと思ったけど、見てみたら本当に消えててびっくりした( git なので手もとにも同じコードあるからそんなに不安な感じはしなかった)。

GitHub 、問い合わせたらちゃんとまともな感じの返信が返ってくるのでその点は評価できる。今回も git の中の人みたいな感じの人から返信来たし、すでに追加的なチェック処理を行うようにしたと書いてあって対応速かった。 GitHub が git の問題直せる人を雇ってるというの、いいと思う。 OSS を使ってる会社が OSS の問題を直せる人を雇ってると強いなぁと感じた。

GitHub には今年の春の時点で 600 万リポジトリくらいあるらしいから( Five years )、 600 万リポジトリの中で行われた Pull Request のすべての Merge の中で 2 例目のレアな経験をしたということになる。なのでこれ読んでる人が同じ現象に遭遇することはまずないと思うけど、こういうことがありましたよというお話でした。