Git 2.0以降の変更点まとめ

WindowsのGitが長い間1.9.5のまま更新が止まっていたため、WindowsでGitを使用する方向けにGit 2.0以降での変更点についてまとめたいと思います。

Git 2.0

以下のAtlassianのBlogも参考にしてください。

とうとう Git 2.0 が現実のものに。便利な機能満載 - Atlassian Japan

git pushのデフォルト動作の変更

git push時の動作がmatchingからsimpleに変更となりました。

以下は設定できるモードの説明です。

matching

2.0以前の既定です。この設定では現在いるブランチ以外のブランチもあわせてアップストリームにpushします。アップストリームに同名のブランチがあれば同名のブランチにpushします。また、ローカルにあって、アップストリームに無いブランチがあったら、そのブランチはpushされません。
意図したブランチはpushされずに、意図しないブランチをpushされてしまう危険性があり、一番危険なオプションです。

simple

2.0以降の既定です。今いるブランチがアップストリームにあれば、今のブランチだけをpushします。アップストリームにブランチが無ければpushしません。目の前で把握できるものだけがアップストリームにpushされるので、比較的安全です。

upstream

ローカルブランチとアップストリームにあるリモートブランチとの間で追跡関係がある場合だけ今のブランチがpushされます。ちょうどpullの挙動の逆になります。
追跡関係を持った追跡ブランチを作成する方法はここの追跡ブランチ項を確認して下さい。

nothing

デフォルトでは何もしません。常にpush先を指定する必要があります。

モードの設定

モードの切替は以下のように設定します。

git config --global push.default simple

git sdd -A

パス指定無しのgit add -A(–all)を指定した場合、今まではカレントディレクトリの疎アブディレクトリが対象でしたが、2.0以降ソースツリー内のすべてのファイルが対象になるように変更されました。git commit -aなどと挙動を合わせるためのようです。また、git add -uでも同様に動作が変更されています。

また、git addとgit add -Aでの動作が同じになり、作業ツーリーで削除されたファイルもインデックスに追加されるようになりました。(言い方が回りくどいですがgit rmされていなくても、作業ツリーでファイルが削除されていればインデックスからの削除されます。)

pull.ffオプション

オプションが追加され、onlyに設定することで、git pull時に常に–ff-onlyオプションを設定した動作と同じになります。

git config --global pull.ff only

falseに設定すると–no-ffオプションを設定したのと同じ動作になり、これがデフォルトの設定となります。

Git 2.1

以下のAtlassianのBlogを確認してください。

Git 2.1 最新情報 – Atlassian Japan

特に気をつけたい点を以下に挙げます。

git grepの結果がフルパス

git grepの結果がフルパスで表示される用意なったので、バッチやシェルスクリプトで処理をしている人は特に注意してください。

Git 2.2

以下のAtlassianのBlogを確認してください。

Git 2.2.0 がリリースされました! – Atlassian Japan

特に気をつけたい点を以下に挙げます。

git stash listでパッチ内容が表示出来る

git stash list -p

と-pオプションを付けることでパッチ内容の表示が可能になりました。

Git 2.3

以下のGitHubのBlogを確認してください。

Git 2.3 has been released – GitHub

Push to deploy

リモートにあるnon-bareなリポジトリがpushしたいbranchがremoteでcheckoutしている状態だとpush出来ないのが通常の動作です。

これだと、Web SiteのDeployにGitを使っているようなケースだと不便な場合もあります。このためremoteでcheckoutされている場合でも、remoteでファイルの変更が無い場合にpushが可能になるようにreceive.denyCurrentBranchオプションが変更されました。

Push to deployを実現するには以下のように設定します。

git config receive.denyCurrentBranch updateInstead

Git 2.4

以下のGitHubのBlogを確認してください。

Git 2.4 — atomic pushes, push to deploy, and more – GitHub

特に気になったのが以下の点。

Atomic push

--atomicオプションを使うことで、複数のブランチやタグをまとめてpushする場合に、何れかで失敗した場合は、それ以外のブランチやタグもまとめて失敗するようにします。

git push --atomic origin branch1 branch2 ...

statusにverboseオプションの追加

–verbose, -v を2回指定すると、ローカルリポジトリのHEADとコミットされていない変更点との差分を見ることができる(つまり git diff と git diff –stagedの差分を両方あわせて見ることができる)。

まとめ

1.9からだいぶ経ってしまっているので変更点も大きいですが、基本的にはより安全に細かいところに手が届く方向での改造だと思います。

コメントを残す