Git 1.8.5 の新機能

Nicola Paolucci
Nicola Paolucci
リストに戻る

重要なアップデートがいくつか予定されている git の次のメジャーリリースを待っている間に、最新のポイントリリースのリリースノートを見てみましょう。そうです、1.8.5が発表されました!

以下は、私がリリース ノートを調査した結果、平均的な git ユーザーである私の立場から見て興味深いと感じた内容です。

まだご覧になっていなければ、リリース 1.8.21.8.31.8.4 に関する私の以前のノートをご確認ください。

インストールに関するお決まりの助言

パッケージマネージャーがディストリビューションを遅らせる場合がある (このような場合は私はどうすることもできません) という注意書きとともに、アップグレードに関するいくつかの助言を提供する事が私の慣習となっています。いずれにせよ、簡単にアップグレードを行うための説明を下記します。

  • OSX で homebrew を使用している場合は、brew update && brew upgrade git と入力してください。
  • Ubuntu ベースのディストリビューションを使用している場合は、魔法のような apt trick を使用してください (その他のディストリビューションについては、読者のみなさんの演習として残すことにします)
  • Windows の場合は、単純に新しいインストーラを実行してください (Windows ポートが少し遅れることがありますので、すぐに見つけられない場合はしばらくお待ちください)

HEAD の新しいエイリアスがついに登場

これはしばらくの間取り組まれていましたが、ようやく誕生です。これからは HEAD に新しいエイリアスがあるので、大文字を 4 つ入力する代わりに「@」、たとえば「git log @」と入力できます。

リベースの改善

リベースに加えられた改善:

  • 今後は、--interactive rebase のオペレーションズ シートで、コミット ID のリストが core.abbrev の長さに順応します (core.abbrev とは、デフォルトを 7 とした、コミットの簡易ハッシュの長さを支配する構成です)。

  • git pull --rebase がデフォルトの平坦化を使用するか、設定を pull.rebase から preserve へと修正してマージを保存するかに関して、カスタム化が可能です。これと、rebase --preserve-merges の詳細に関しては、Stack Overflow の回答を確認してください。

ステータスの小さな改善

本リリースには、git status に対する多彩な改善点が含まれています。

  • submodule.$name.ignore が「all」に設定されている、サブモジュールに関する汚れたステータス情報をプリントしません。

  • チェリーピック中、ピックされる元々のコミットが表示されます。

  • # コメント マーカーによってプリペンドされた出力を吐き出しません。スクリプトが git status の出力をパースする必要がある場合は、git status --porcelain を利用するようにアップデートしなくてはいけません。

  • git statusgit branch -v -v は、他の一切のブランチにビルドしないブランチ、それがビルドしているブランチと一致するブランチ、そしてもはや存在しないその他のブランチにビルドするよう構成されたブランチとの間を識別できます。

「ほとんど」のクラスに対する diff

git diff --diff-filter は、これまでもいくつかのクラスの変更をフィルタリングできました。

--diff-filter=[(A|C|D|M|R|T|U|X|B)...[*]]
    Select only files that are Added (A), Copied (C), Deleted (D), Modified (M), Renamed (R), have their type
    (i.e. regular file, symlink, submodule, ...) changed (T), are Unmerged (U), are Unknown (X), or have had
    their pairing Broken (B). Any combination of the filter characters (including none) can be used. When *
    (All-or-none) is added to the combination, all paths are selected if there is any file that matches other
    criteria in the comparison; if there is no file that matches other criteria, nothing is selected.

新たに、小文字を使用して、これらのクラス以外のすべてを表示することを意味できるようになりました。

サイト毎の HTTP 変数

  • 「http.*」変数は、設定が適用される URL ごとに指定できるようになりました。たとえば、次のコードは、指定されたサイトと通信しているときにのみ http.sslVerify をオフにします。
[http]
    sslVerify = true
[http "https://weak.example.com/"]
    sslVerify = false

移動中のサブモジュールの認識の向上

毎回のリリースごとにサブモジュールのサポートは安定的に改善されてきましたが、今回は git がサブモジュールを移転できるようになりました。

'git mv A B' when moving a submodule A has been taught to relocate its working tree and to adjust the paths in the .gitmodules file.

パフォーマンス、内部実装等

  • HTTP トランスポートは、可能な場合は TCP キープアライブの使用を試みます。

  • git repack は C 言語で書かれています。

その他のまめ知識

リリースノートからの直のまめ知識

  • git whatchanged は廃止予定ですが削除はされていません。ドキュメンテーションの一般的な部分において、あまり目立たないようにはなりました。
  • git cherry-pickgit cherry-pick - が前のブランチから選択するのを理解するようになりました。
  • 利用可能な場合は、xdg-open を git web-browse のブラウザ バックエンドとして利用できます (これゆえに、git help -w 出力を表示します)。
  • make -C 同様、git -C ... は他の一切の行動を取る前に、そこに行くよう Git に伝えます。
  • foo^{tag} を使って自身にタグを剥がすようにします。即ち、no-op.。そして「foo」がタグでない場合は失敗します。git rev-parse --verify v1.0^{tag} は、test $(git cat-file -t v1.0) = tag と言うより便利な方法になります。
  • git push --no-thin は、実際には「シン パック トランスファー」最適化を無効化します。
  • Makefile と makefile の両方に一致する「:(icase)makefile」や、「foo」および「foo」のいずれかのサブディレクトリ内の「bar」に一致する「:(glob)foo/**/bar」などの魔法のようなパス指定を、今までより多くの場所で使用できます。
  • git blame は、ラインの複数ブロックの起点を発掘するため、1 つ以上の -L オプションを受け入れられます。
  • http トランスポートクライアントは、オプションとして http.savecookies 構成変数を使ったクッキーの保存を依頼できます。
  • git fetch (よって、「git pull」も) は、fetch.pruneremote.*.prune の構成変数を確認して、まるで --prune のコマンド ライン オプションが与えられたような行動を取るよう学習しました。

今回は、これで終了です。このアップデートが便利だと思ったらお知らせください。今後もお楽しみに。DVCS を使いこなす方法をもっと知りたければ、@durdn で私をフォローするか、素晴らしい @AtlDevtools チームをフォローしてください。

Git を学習する準備はできていますか?

この対話式チュートリアルを利用しましょう。

今すぐ始める