git 1.7.4.4未満だとGitLabのtree表示でエラーになることがある

gitは、1.7以上になっても意外とマイナーバージョンでの仕様変更がちょくちょくあります。

今回は、1.7.4.3と1.7.4.4のお話。そんな古いバージョン使うなって話ですが、Ubuntu 10.04初期インストール時の参照パッケージは1.7.0系なので、十分引っかかることはありそうです。

1.7.4.4の変更点は、diffを見るのが一番詳しいですが、ReleaseNoteにさらっとこんなことが書いてあります。

“git log –max-count=4 -Sfoobar” now shows 4 commits that changes the
number of occurrences of string “foobar”; it used to scan only for 4
commits and then emitted only matching ones.

たとえば、こういうコミットがあったとします(上が新しい)。
1

git log --max-count=1 --follow -- README.md

というコマンドを叩いたときに、

1.7.4.4ではこの部分が検索されます。最初にパスでフィルタして、その中でmax-count件分を取得します。
3

1.7.4.3ではこの部分が検索されます。最初にmax-countの分探索して、その結果をパスでフィルタします。
何も取得できませんね!
2

Release Noteには特に書いてないですが、followを指定しなければ、1.7.4.3でも1.7.4.4と同じ挙動をしました。

GitLab(厳密には依存gemのgitlab-grit)では、last_commitなところでこのmax-countを使用しているので、この挙動が原因でnilエラーが発生し、プロジェクトツリーに最新のコミットが表示されなくなる可能性があります。

ちなみにcheck.rakeを見る限り、現在のGitLab(5.3 master)は1.7.10以上推奨みたいです。この他にも旧バージョンは問題があるみたいですね。

結論:gitは新しくしておきましょう。

gitlab-gritの方には、READMEに取り込んでもらいました。gritは1.7.4.6以上に依存しているので、最低でもそれ以上にしておいた方が良いです。

Ruby on RailsによるWEBシステム開発、Android/iPhoneアプリ開発、電子書籍配信のことならお任せください この記事を書いた人と働こう! Ruby on Rails の開発なら実績豊富なBPS

この記事の著者

baba

ゆとりプログラマー。 高校時代から趣味でプログラミングを初め、そのままコードを書き続けて現在に至る。慶應義塾大学環境情報学部(SFC)卒業。BPS設立初期に在学中から参加している最古参メンバーの一人。得意分野はWeb全般、Ruby on Rails、Androidアプリケーションなど。最近はBlinkと格闘中。軽度の資格マニアで、情報処理技術者試験(高度10区分)などを保有。

babaの書いた記事

週刊Railsウォッチ

インフラ

BigBinary記事より

ActiveSupport探訪シリーズ