「git」で、特定のリビジョンで変更されたファイルのみ、フォルダ構成を維持したまま差分としてファイルをエクスポートしたい時に使えるコマンドを紹介します。
gitには、リビジョン間の差分ファイルをエクスポートするための直接的コマンドは存在しません。そのため、git diff
とgit archive
コマンドを組み合わせて、差分ファイルを圧縮してエクスポートします。
スポンサーリンク
gitで差分ファイルをエクスポート
先述のように、gitでコミット間の差分ファイルをエクスポートするには、git diff
とgit archive
コマンドを組み合わせます。
具体的な手順としては、git diff
コマンドでリビジョン間の差分ファイル名のリストを取得し、git archive
で、それらのファイルのフォルダ構造を維持したまま圧縮ファイルとしてエクスポートします。
言葉だけではイメージが沸かないかもしれない為、コピペで使えるサンプルコマンドを見ながら、差分をエクスポートする方法を見てきましょう。
最新からひとつ前の差分をエクスポート
次のイメージのように、最新と一個手前のリビジョンとの差分を取得します。
コピペ用のコマンドです。
git archive HEAD `git diff --name-only HEAD^ HEAD --diff-filter=ACMR` -o archive.zip
リビジョン(上の例では HEAD)の後ろにチルダ(^)を付けると、そのリビジョンよりも一つ前のリビジョンという指定になるため、これにより、git diff
で最新よりひとつ前のリビジョンから最新リビジョンまでの差分ファvイルの一覧が取得できる仕掛けになってます。
指定したリビジョンの差分をエクスポート
リビジョンを指定して、そのリビジョンと一個手前のリビジョンとの差分を取得します。
コピペ用のコマンドは次の通り。
$ git archive コミットID3 `git diff --name-only コミットID3^` -o archive.zip
2つのリビジョン間の差分をエクスポート
次のイメージのように、2つのリビジョンの範囲を指定して差分を取得します。
コピペ用のコマンドは次の通り。開始と終了リビジョンの指定が逆転しないように注意しましょう。
$ git archive コミットID3 `git diff --name-only コミットID1^ コミットID3 --diff-filter=ACMR` -o archive.zip
開始リビジョン(コミットID)の後ろにチルダ()を付けるのを忘れないようにしましょう。チルダ()をつけ忘れると、開始リビジョン(コミットID)の変更が抽出できません。
プッシュする前のローカルの変更点をエクスポート
プッシュする前のコミットと、リモートの最新との差分をエクスポートする場合は、次のコマンドを使用します。
git archive HEAD `git diff --name-only リモート名/ブランチ名..HEAD --diff-filter=ACMR` -o archive.zip
… の右側が時系列的に最新とみなされ
、上のコマンドの場合は git commit した後のローカルの最新と、リモートリポジトリの差分を確認する時につかえます。
ブランチ間の差分をエクスポート
2つのブランチ間の差分をエクスポートする場合は次のコマンドを使用します。
git archive ブランチA `git diff --name-only ブランチA..ブランチB --diff-filter=ACMR` -o archive.zip
上のコマンドの場合、ブランチAとブランチBを比較し、差分があるブランチAのファイルをエクスポートします。
スポンサーリンク
特定リビジョンのファイルを全部エクスポート
差分ではなく、特定のリビジョン時点でのファイル一式をエクスポートする場合は、git archive
コマンドだけを使用します。
git archive <リビジョン> -o archive.zip
いくつか使用例を見てみましょう。
最新リビジョン(HEAD)をエクスポート
現在チェックアウトしているブランチの最新リビジョン(HEAD)のファイル一式をエクスポートします。ローカルで変更したファイルは含まないため、コミット前にリポジトリ上の最新を抜き出したい時などに便利かもです。
$ git archive HEAD -o archive.zip
リビジョンを指定してエクスポート
コミットIDを指定して、そのリビジョン時点のファイル一式をエクスポートします。
$ git archive 2320f92af5 -o archive.zip
○世代前のリビジョンをエクスポート
最新リビジョン(HEAD)の1世代前や、指定リビジョンの1世代前など、リビジョンの後ろにチルダ(^)を付けて、指定リビジョンの○世代前のファイル一式をエクスポートします。
次のコマンドは、最新リビジョンの1世代前をエクスポートするコマンドの例です。
$ git archive HEAD^ -o archive.zip
まとめ
「git」のコマンドで差分を抽出する方法や、指定したリビジョンをエクスポートする方法などを紹介してきました。
今回紹介した内容は、プログラムを客先に納品した後に変更があり、差分のファイルだけを再度納品したい時などに超活躍します。(少なくとも私は重宝している)
0 件のコメント:
コメントを投稿