長い間待たれてきた git のメジャーバージョンアップがリリースされました。Changelog に目を通し、素晴らしい機能を見つけられることに興奮しています。過去の git リリースの情報をおさらいしたい場合は、バージョンアップのたびにその情報を特集してきた私の過去記事をご覧ください: 1.8.21.8.31.8.41.8.51.9

このブログ記事では、今回のバージョンアップの一部しか取り扱うことしかできません。変更とバグ修正の完全リストをご希望の場合は、Changelog の完全版をご覧ください。

デフォルト設定一部変更: ユーザビリティの改善と混乱を解消

まず最初に、互換性に影響する変更を見ていきましょう。複数の変更がありますが、これらのアップデートは、初心者にとどまらず多くの人々を悩ませてきた誤解を解決するもので歓迎できると思います。これらの変更は、.gitconfig を微調整するだけでとても簡単に自分の好みの設定に戻すことができるので、経験豊かなgit ユーザーをあまり悩ませることはないはずです。

重要! git push (引数なし) のデフォルトが simple なプッシュの仕組みに

単純な引数なしの git push のデフォルトの動作は、これまで直感的に理解できるものではありませんでした。ローカルとリモートでブランチ名が一致する限り、ブランチはすべてリモートに送られ、これが、matching オプションの意味でした。

Git 2.0 で、push のデフォルトが simple に変更され、より具体的・直感的で、対象範囲が狭まりました。これにより、

  • 同じリモートでカレントブランチが対象リモートブランチと連携するように設定されている場合のみ、カレントブランチが同名ブランチへ、

  • 通常のフェッチ先ではないリモートにプッシュする場合は、カレントブランチが同名ブランチへ、push されるようになります。

古きを愛し、旧来のデフォルトに慣れ親しんでいる方は、設定変数push.default を matching に戻すこともできます。

git add path が git add -A path と同じ意味に

git add dir/ は、ディレクトリから削除したパスを認識し、削除したパスを記録するようになります。素晴らしいユーザビリティの改良です。旧バージョンでは、git add path は、削除したパスを認識しませんでした。git add --ignore-removal path と指定すれば、これまでの動作を維持できます。

git add -u と git add -A の実行対象は、コマンドを実行するサブフォルダーではなく、ソースツリー内のすべてのファイルとなります (この 2 つのコマンドは、他の git コマンドと同じように動作します)。. フォルダーを指定すれば、従来の動作を維持できます。

git svn のデフォルトプレフィクス変更

Git 2.0 では、git svn のデフォルトリモートプレフィクスが変更され、(refs/remote のすぐ下ではなく) refs/remotes/origin 下にリモート追跡ブランチが配置されるようになりました。これは、git svn の --prefix オプションを使ってカスタマイズできます。

コマンドごとの互換性に影響しない変更

次の変更は互換性には影響を与えません。私が便利だな、面白いなと思ったものを挙げます。

git log の新しいオプション --show-linear-break など

  • git log の新しいオプション --show-linear-break は、数珠つなぎで出力された履歴に区切りを表示します。

  • git log --cc の形で、複数の parent に対してまとめた差分が最適化されたことを示します。

git rebase がコミットに署名できるように

  • git rebase は、単体の - をそれまでにいたブランチ @{-1} と解釈するようになります。

  • コマンドラインで git rebase (pull および他のコマンド付き) に、--gpg-sign オプションを使えるようになりました。

git commit に新しいクリーンアップモードなどが追加

  • git commit --cleanup= に新しいモード、scissors が追加されました。--cleanup オプションは、コミット実行前にコミットメッセージのクリーアップ方法を決定します。今回の新しいモード scissors は、行頭と末尾の空行、末尾の空白を取り除き、連続した空行をつぶし、#でコメントされた行を truncate します (remove ではありません)。様々なオプションに関する詳細は、ここでご覧ください。

  • commit.gpgsign 設定に true を設定することで、git commit に、結果のコミットに常に GPG 署名するように指示できます (コマンドラインで --no-gpg-sign を使って上書きできます)。

git tag が番号で表示されたバージョンをソートできるように

  • git tag --list 出力は、バージョンソートの--sort=version:refname を使ってソートできます。

その他の変更いろいろ

  • git grep に、-h (ヘッダーなし) および -c を付けると、ネイティブ grep と同様に振る舞うようになります。

  • git config は、--file - (ダッシュは 1 つです) を使って、標準入力を読み出せるようになりました。

  • .gitignore ファイルでの末尾空白には、警告が表示され、無視されるようになりました。

  • git pull では、新しい “pull.ff” 設定を使った場合のみ、fast-forward を承認する設定ができるようになりました。

  • git reset -N は、ターゲットの tree-ish に対してパスが既知でない場合、intend-to-add を既知のパスとして維持します。

  • JGit のビットマップインデックス機能が移植されました。したがって、この機能を使用するリポジトリのオブジェクトを扱う際、パフォーマンスが大幅に改善されることになるはずです。詳細は、こちらの EclipseCon deckをご覧ください。

結論

この大まかなまとめが役立つことを願います。さらに多くの情報をお伝えしますので、引き続きこのページをチェックしてください! ハッキングや分散型バージョン管理システム (DVCS) の情報は、私@durdn@AtlDevtoolsチームをフォローしてください。

本稿は、Atlassian Blogs 日本語版の転載です。本文中の日時などはAtlassian Blogs 英語版での投稿当時のものですのでご了承ください。