Git 2.9が発表された。 merge,rebase,commitのワークフローに新機能が追加された他,多数の改善とバグフィックスが行われている。
mergeコマンドとpullコマンドでは,--allow-unrelated-historiesを指定しない限り,無関係なヒストリを持つ2つのブランチをマージすることはできなくなった。ブランチが異なるヒストリを持つのは,それぞれのルートコミットが同じでない場合だ。コードとドキュメントのように,2つのブランチがまったく違う目的で使用されるケースがこれにあたる。このような場合は,結果が意図しないものになる可能性があるため,無関係なヒストリをgitが警告なしにマージすることのない方が望ましいのだが,無関係なヒストリのマージが必要な”レア”なケースでは,上記した--allow-unrelated-historiesオプションを使って強制的に行なうこともできる。
rebaseコマンドでは,非対話モードで-xオプションの使用がサポートされるようになった。-x(--exec)オプションは,指定したコマンドをrabaseステップ毎に実行するために使用する。例えば,各rabaseコミットが何かを壊していないかチェックするために,ユニットテストを実施することが可能になる。このような処理を行なうには,これまでは-iオプションも指定しなくてはならなかった。git rebase -mを使用してブランチをルートからrebaseするように指定すると,rebaseが親コミットが存在するものと仮定しているため,コマンドの実行が失敗するというバグも修正されている。
commitコマンドでは,デフォルトで冗長表示を行なうことを指定するcommit.verboseオプション設定が新たにサポートされた。このオプションを設定すると,コマンドラインで毎回--verboseオプションを指定したのと同じように,変更内容の差分がインライン表示される。さらに,git commitでコミットが可能であるにも関わらず,git commit --dry-runでは不可能であるように表示されていた特定のケースにおいて,正しい出力が得られるようになった。さらに,git commitの-mオプションで空のメッセージが指定された場合,動作が不正となるバグが修正されている。
git cloneコマンドに新設された--allow-submodulesオプションによって,ヒストリ全体のプルを必要とせずに,リポジトリのクローンとサブモジュールの再帰的なクローンが可能になり,クローンの速度と効率が向上している。
Git 2.9ではフックの使い勝手も改善されている。commitやmerge, rebase, pushなどのgitタスクの前後に実行可能なスクリプトを定義することで,各タスクへのタップが可能になった。新しいcore.hooksPath設定オプションを使って,フックを提供するディレクトリを指定することもできる。
git config core.hooksPath /etc/git/hooks
これまでのgitでは,フックを.git/hooksディレクトリから検索していた。
その他のGit 2.9の改善点としては,ファイル名変更の検出,git logでのタブの扱いの改善,git describe --containsアルゴリズムで得られる情報の拡張などがある。ここで紹介した以外にも,Git 2.9で提供される改善点やバグフィックスのリストにはたくさんの項目があるので,詳細はリリースノートで確認してほしい。
この記事を評価
- 編集者評
- 編集長対応