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で提供される改善点やバグフィックスのリストにはたくさんの項目があるので,詳細はリリースノートで確認してほしい。
この記事を評価
- 編集者評
- 編集長対応