【Git】Git で管理しているコードの差分を Git を使えない環境に適用する方法

  • 2021年4月5日
  • Git

要約

# Gitを使えるマシンにおいて適用したい Git のバージョンをチェックアウトした状態で次を実行
git diff "適用前のバージョンのコミットID or 適用前のバージョンのタグ" > git_diff_output.patch
# 得られた git_diff_output.patch を適用先のサーバに置いて次を実行
patch -p1 < git_diff_output.patch

本文

 何かしらの都合で Git を使えないサーバ上のソースコードを更新しなければいけない時があります。そういった時のソースコード更新は面倒です。どのファイルを上書きして、どのファイルを削除するか一々確認する必要があります(お手製スクリプトプログラムで更新するにしても 1 度は全体を把握する必要があります)。新鮮なソースコード全体をあるディレクトリ上に用意して、旧ソースコードのディレクトリを名前変更、新鮮なソースコードのディレクトリの名前を旧ソースコードのディレクトリにして問題がないかテスト、問題がなければ旧ソースコードを削除、といった手順を取ったりもします(最もソースコードのディレクトリ以下にソースコードと関連しない重要なデータがある場合、この方法は使えませんが)。Git でのバージョン管理ならば都度 git pull するだけで適切なソースコードを得られます。Git が使えない環境でもどうにか Git 相当の操作をしたくなります。これは git diff コマンドと patch コマンドで実現できます。

 git diff コマンドは git で管理されている何かと何かを比較し、差分を出力するコマンドです。このコマンドで比較できるものはコミット、ブランチ、ファイルをはじめとして色々あります。詳しくは git diff コマンドのヘルプや各チートシートが頼りになります。ここではコミット間の差分を得る目的で使います。
Git – git-diff Documentation
git diffの全オプション一覧 – Qiita
忘れやすい人のための git diff チートシート – Qiita

 patch コマンドは POSIX(UNIX系OSの守るべき仕様)に含まれているコマンドの一つであり、Linux デストリビューションのどれでも恐らく初期状態で使用可能なコマンドです(詳しくは知らないので”恐らく”)。patch コマンドではテキストファイルに差分を適用できます。主に次の様にパッチファイルを別途用意してファイルから patch コマンドに差分適用に必要なデータを渡して使います。

patch -p1 < git_diff_output.patch

 git diff の出力は patch で用いることが可能な形式で出力されています。このため、次の様に Git が使える環境で適用したいバージョンのコミット ID なりタグなりを用いてパッチファイルを得、そのパッチファイルを Git が使えない環境で用いることによって Git 抜きでも Git で管理されている差分を適用できます。

# Gitを使えるマシンにおいて適用したい Git のバージョンをチェックアウトした状態で次を実行
git diff {適用前のバージョンのコミットID or 適用前のバージョンのタグ} > git_diff_output.patch
# 得られた git_diff_output.patch を適用先のサーバに置いて次を実行
patch -p1 < git_diff_output.patch
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG