1

私は時々、お客様のためにソフトウェアのアップグレード (Atlassian ソフトウェア、jira、confluence など) を行っています。私が毎回遭遇する問題は、顧客がインストールされたバージョンに何らかのカスタマイズ (構成の変更、Web テンプレートの変更など) を行った可能性があり、それを処理 (保持または無視) する必要があるということです。どのファイルがどこで変更されたのか正確にはわかりません。何も見逃さないようにする必要があります。これまでの私の解決策は、インストールされたバージョンのインストール tar.gz を抽出し、rsync (--verbose --dry-run --itemize-changes を使用) を使用して変更内容を特定することでした。次に、grep および sed マジックを実行して興味深い部分を除外し、検出された変更を「手動で」適用します。

つまり、基本的に 3 つのディレクトリがあります。A (変更のある旧バージョン)、B (旧バージョン-クリーン)、および C (新バージョン)。B と比較して i A の変更を特定し、必要に応じてそれらを C に適用するのが好きです。

さて、このプロセスを支援するために git を使用できますか? 私は特に変更部分を手動で適用するのが好きではありません。私はgitにかなり慣れていません。誰かが私を正しい方向に向けたり、なぜこれがひどい考えなのか教えてもらえますか?

4

1 に答える 1

2

これを行う従来の方法は、diffと を使用することpatchです。誰もが知ってdiffいます -- ファイルを比較し、それらの違いを出力します。ディレクトリ全体でも使用できます。diffしかし、 (適切なモードで) の出力を取得して、または類似のものにフィードpatch -p1し、diff ファイル (通常は という名前) で指定された変更を加えることができることを誰もが知っているわけではありません*.patch

最初にインストールされたツールのバージョンがわかっている場合は、新しいコピーを一時ディレクトリに解凍し、それを作業コピーと比較します。これにより、パッチ ファイルが作成されます (ソース管理に確実に保存できます)。そのファイルは、マージの競合がない限り、他のバージョンを含む他のインストール済みインスタンスに適用 (「移植」) できます。競合がある場合は通知され、手動で修正できます。

ちなみに、これは Linux のパッケージングが時々どのように機能するかということです。ディストリビューターは上流のソースと独自のパッチ ファイルを取得し、ビルド/パッケージング時にそれらを組み合わせます。

于 2013-02-13T11:55:08.707 に答える