Git 1.8.5 最新情報

かなり重要なアップデートをもたらす次の 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 @」と入力できます。

rebase に関するいくつかの仕上げ

リベースには、いくつかの仕上げが施されました。

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

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

status に関する小さな改善

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

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

  • cherry-pick 中、ピックされる元々のコミットが表示されます。

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

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

「ほとんど」 のクラス向け Diff

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

1
2
3
4
5
6
--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 をフリップオフするのは、指定されたサイトに対話する時のみです。
    1
    2
    3
    4
    [http]
        sslVerify = true
    [http "https://weak.example.com/"]
        sslVerify = false

進行中のサブモジュールアウェアネス

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

1
    '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-pick が、git 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」等のマジックpathspecs や、「foo」における 「bar」に一致する「:(glob)foo/**/bar」、そしてあらゆる「foo」のサブディレクトリをより多くの場所で利用できます。
  • git blame は、ラインの複数ブロックの起点を発掘するため、一つ以上の -L オプションを受け入れられます。
  • http トランスポートクライアントは、オプションとして http.savecookies 構成変数を使ったクッキーの保存を依頼できます。
  • git fetch (よって、「git pull」も) は、fetch.pruneremote.*.prune の構成変数を確認して、まるで–prune のコマンドラインオプションが与えられたような行動を取るよう学習しました。

今回は以上です。今回の最新情報は役に立ちましたか?今後の情報にもご期待ください。どうぞ私 @durdn や素晴らしい @AtlDevtools チームをフォローして、魅力的な DVCS の情報を入手して下さい。

*本ブログは Atlassian Blogs の翻訳です。本文中の日時などは投稿当時のものですのでご了承ください。
*原文 : 2013 年 12 月 3 日 "What's new in Git 1.8.5"