Gitは最新リリースでユーザインタフェースの改善を目指した多くの変更を導入した。また2つの重要な脆弱性を修正した。
周知の通り、Gitが一意にオブジェクトを区別するために使っているSHA–1ハッシュアルゴリズムは最近衝突攻撃への脆弱性が証明されている。しかしGitのチームは新しい、より安全なハッシュアルゴリズムへの移行準備をしている。衝突を生む意図で作成されたように見えるあらゆるオブジェクトを検出し拒否する仕組みを実装している。これは衝突攻撃の恐れを効果的に軽減するだろう。
セキュリティ面では、Git 2.13はgitシェルを使うGitホスティングサーバすべてにに影響する脆弱性も修正している。これはGitのpush/pullコマンドに加え、git-shell-commandsディレクトリにインストールしたカスタムコマンドでSSHを使ったシェルアクセスに制限を与える。脆弱性は攻撃者が潜在的にリモートサーバでシェルコマンドを実行できるようにしていた。
すでに言及したように、Git 2.13は多くのUI改善を含む。とくに、複数の異なるプロジェクトに対して作業する開発者には有益であろう機能は、条件付き設定をすることで複数のアイデンティティを扱えることだ。手短に言うと、条件付き設定は一連の条件に基づいてGitの設定ファイルを含める方法を提供する。たとえば、リポジトリが存在するディレクトリパスに基いてGitの設定をカスタマイズするために~/.gitconfigファイルで以下の命令をすることができる。
[includeIf "gitdir:~/work/"]
path = .gitconfig-work
[includeIf "gitdir:~/play/"]
path = .gitconfig-play
とくに、これは.gitconfig-workと.gitconfig-playで異なるuserとemailを定義するのに使える。
ほとんどの開発者が使っていてGit 2.13で手を加えた別の機能はGitのコマンドでのパスの扱いである。すなわちpathspecsだ。たとえば、もしリポジトリであるタイプのファイルすべてでgrepを実行したいなら、こう書くだろう。
git grep my_pattern '*.c'
今、否定のpathspecsを使うこともできる。コマンドから特定のpathspecsを除外するためだ。そして属性を使うpathspecsも使える。これはpathspec定義に属性を含めることができる。たとえば次のようなものだ。
git grep text_to_search -- src ':(exclude)*.c'
その他注目すべき改善は以下だ。
- 今
git branchとgit tag、git for-each-refは--no-containsオプションをサポートする。これは指定したコミットを含んでいないタグやブランチを選択するのに使える。 たとえば次のようなものだ。git tag -l --no-contains cf5c725 'v[0-9]*' | sort | tail -n 10--no-containsオプションは既存の--containsとともに使うときは見逃される。たとえば2つのタグの間で作られたブランチを見つけるときなどだ。git branch --contains v2.8.0 --no-contains v2.10.0 -
git stashは現在のワーキングツリーの一部だけを退避できるようpathspecsの利用をサポートする。ゆえに退避するものをより制御できる。 -
一連のコマンドは今サブモジュールで認識される。
checkoutやgrep、ls-filesを含む。これが意味することは、再帰的にサブモジュールを横断するだろうということだ。さらに、git status --shortはサブモジュールについてより詳細な情報を報告する。
Git 2.13で新しいことのより詳しい概説は完全なリリースノートを読んでほしい。
Rate this Article
このコンテンツのトピックは セキュリティ です。
関連記事:
関連記事
関連スポンサーコンテンツ
特集コンテンツ一覧
InfoQ ニュースレター
毎週火曜日に前週のまとめコンテンツをお送りいたします。(日本語版は不定期リリース)25万人のシニアな開発者コミュニティーにぜひご参加ください。 サンプルを見る
We protect your privacy.