BT

最新技術を追い求めるデベロッパのための情報コミュニティ

寄稿

Topics

地域を選ぶ

InfoQ ホームページ ニュース diff, branch、grepなどが改善されたgit 2.19

diff, branch、grepなどが改善されたgit 2.19

ブックマーク

原文(投稿日:2018/09/13)へのリンク

最新のgitリリースには、diffbranchgrep各コマンドの改善、コマンドライン補完の向上、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-movedignore-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には、ここで紹介したものよりもさらに多くの新機能がある。すべての詳細に興味があるならば、ぜひ公式リリースノートを確認して頂きたい。

 
 

この記事を評価

採用ステージ
スタイル
 
 

この記事に星をつける

おすすめ度
スタイル

BT