最新のgitリリースには、diff
、branch
、grep
各コマンドの改善、コマンドライン補完の向上、range-diff
コマンドの新設など、多数の新機能や内部処理の変更が行われている。
git diff
コマンドでは、intent-to-add
で追加されたファイルのパスを、新しいものとして正しくマークできるようになった。intent-to-add
は、作業ツリーに空ファイルを追加する場合に、git add
コマンドでgit add --intent-to-add <file>
のように使用する。git diff
のアウトプットに新しいファイルの内容をすべて表示する目的で利用される場合がほとんどだが、従来は、diff内のファイルパスが新しいものとしてマークされていなかった。関連してapply
コマンドでも、intent-to-add
オプションの処理が改善されている。具体的には、作業ツリーのintent-to-add
で追加された新しいファイルにのみ影響するパッチを適用した場合、インデックスに新たなパスが追加されるようになった。diff
に戻ると、color-moved
オプションが拡張されて、新たにcolor-moved-ws
オプションがサポートされた。これはgit diff
において、空白以外が変更されずに移動した行を色付きで分かりやすく表示するためのものだ。color-moved
とignore-space-change
を併用すればGit 2.18でも同じようなことを達成できるが、後者のオプションが移動した行だけではなく、すべての出力に適用される点が異なる。
git grep
には2つのオプションが追加された。最初にヒットした列番号を出力に追加するcolumn
と、マッチした行全体ではなく、正規表現にマッチした部分だけを出力するonly-matching
である。
git branch
も2つの点で改善されている。ひとつは、git tag --list
がソートのデフォルトをtag.sort
設定オプションから読み込むのと同じように、git branch --list
がデフォルトのソートオプションをbranch.sort
設定オプションから読み込むようになったことだ。また、git branch
のオプションで、-create-reflog
の短縮形であった-l
は、--list
の別名として誤用されることを防ぐために非推奨となった。
バージョン2.6以降、リポジトリにプッシュされるオブジェクトの整合性をチェックするgit fsck
コマンドが提供されている。このテストは、変数receive.fsck.*
を使って設定することにより、受信側で実行することも可能である。例えば、変数receive.fsck.zeroPaddedFilemnode
を定義すれば、ゼロ埋込みファイルモードによってfsck
がフェールした場合、プッシュを拒否することができる。git 2.19では変数fetch.fsck.*
を使って、git fetch
でも同じことを実施できるようになった。
実装面ではgit submodule foreach
がCで書き直されたことにより、パフォーマンスが改善されている。さらに、コマンドラインの補完機能が改善され、サブコマンドを使うか、あるいは--no-
のプレフィックスを持つオプションによって、設定変数の一覧がレポートされるようになった。git fetch
コマンドでは、返されるコミットの数を制限する--negotiation-tip
オプションが新たにサポートされている。これにより、リモートヒストリ内に存在しない参照がローカルリポジトリに多数ある場合において、帯域幅とパフォーマンスが向上する。
開発者側から見た場合、git 2.19ではstrcat
の使用が禁じられた。危険過ぎるというのがその理由で、コンパイルエラーが発生するようになっている。
git 2.19には、ここで紹介したものよりもさらに多くの新機能がある。すべての詳細に興味があるならば、ぜひ公式リリースノートを確認して頂きたい。
この記事を評価
- 編集者評
- 編集長アクション