カスタム変更されたオープンソースソフトウェアを最新に保つためのGitワークフロー?
-
26-09-2019 - |
質問
私たちの大学は、管理するサーバー上のキャンパス部門にWebホスティングを提供しています。オープンソースのサードパーティプログラムをインストールするには、プログラムが実行される前に、ファイル許可とコードを変更する必要があります。 (おなじみの場合は、suexecを使用しています。)
現在、インストーラースクリプトを介してWordPressを提供しています。ユーザーは、最新の安定したリリースをアップロードし、SSHを介してサーバー側のPHPスクリプトを実行します。このPHPスクリプトは、すべてのファイル/フォルダーのファイル許可を変更します。 さまざまなファイルにいくつかのコードを追加/削除し、いくつかの新しいファイルを作成します。 このインストーラースクリプトは、新しい安定したバージョンがリリースされたときの扱いにくいバランスをとる行為です。
バージョンコントロール(特にGIT)の使用を開始して、スクリプトに頼って変更を加えるのではなく、カスタム変更を追跡しますが、使用するワークフローがわからないことです。分岐とマージに精通していますが、新しいリリースが発行されたときに古い変更を統合する方法がわかりません。
私のgitワークフローは、WordPressコアから新しい変更を統合するだけでなく、古いカスタム変更を維持することです。
解決
あなたの変更を支店に維持し、更新するたびにWordPressから最新のブランチに反論することをお勧めします。大まかなタイムラインで...
+-- WordPress 1.0
v
[master] --*--*
\
[custom] *--*--* <- your customizations
WordPressを更新する場合は、マスターに切り替えて最新のSouceで新しいコミットを行います(または、git-svnを使用してマスターを同期させます):
+-- WordPress 1.0
| +-- WordPress 1.1
v v
[master] --*--*--*--*
\
[custom] *--*--* <- your customizations
今、あなたはすることができます git rebase master custom
最新の変更に対して変更を再生するために、途中で競合を解決します。あなたのタイムラインは次のようになります:
+-- WordPress 1.0
| +-- WordPress 1.1
v v
[master] --*--*--*--*
\
[custom] *--*--* <- your customizations
アップデート: 少しの根拠を提供するために... WordPressからのコードとカスタマイズの明確な区別を提供するため、この問題に対するこのアプローチが好きです。 WordPressの新しいバージョンを入手すると、「統合」に本当に興味がありません。 WordPressの新しいバージョンにカスタマイズを再適用することに興味があります。私の見解では、その反復化は、リベースを介したコミットによって最も簡単にコミットされます。競合は、カスタマイズが破壊される可能性が高いことを意味するため、古いカスタマイズコミットはとにかくゴミです - そのソースで問題を修正し、更新された履歴をきれいに保つ方が良いです。
後 master
更新されます custom
リベースされてプッシュされているため、協力者は最新の作業に反対するだけです。
これは私の意見であり、しっかりとしたリベース>マージ支持者としてです。 Gitの美しさは、正しい答えが1つめったにないことです。自分に合ったものが見つかるまで調整し続けてください。
他のヒント
私の一般的なアプローチは、2つの枝を持つことです。 upstream
と master
. 。リポジトリを作成します(から始めます master
ブランチ)、使用するアップストリームコードの最新コピーをチェックしてから、 upsteram
との枝 git branch upstream
. 。また、インポートした上流バージョンを示すタグを作成します。 git tag wordpress-1.0
. 。私は通常、これに軽量タグを使用します(注釈なしで、基本的には改訂版のポインターです)。
[wordpress-1.0] Key: [tag]
v branch
* <- upstream * commit
^- master
今、あなたがまだ中にいる間 master
ブランチ、変更をコピーしてそれらをチェックインします。これで2つのブランチがあります。 upstream
これには、手付かずの上流のソースが含まれています master
あなたの変更が含まれており、あなたがどの変更を加えたかを示しています upstream
.
[wordpress-1.0]
v
* <- upstream
\
+--* <- master
すべての変更を行います master
ブランチ。
[wordpress-1.0]
v
* <- upstream
\
+--*--*--* <- master
アップストリームコードの新しいバージョンが登場したら、チェックしてください upstream
ブランチ (git checkout upstream
)、以外のすべてをクリアします .git
ディレクトリ、および新しいアップストリームバージョンのコピー。使用する git add -A
上流バージョンのすべての変更をステージングするには、コミットしてタグを付けます。
[wordpress-1.0]
| [wordpress-1.1]
v v
*--* <- upstream
\
+--*--*--* <- master
さあ、チェックしてください master
, 、そして上流の変更をマージします。この時点で、新しいアップストリームバージョンを取得したり、バージョンを取得したり、通常のマージで行うようにマージされた変更を取得するなど、マージする方法を選択できます。
[wordpress-1.0]
| [wordpress-1.1]
v v
*--*--------+ <- upstream
\ \
+--*--*--*--* <- master
したがって、すべての変更が行われます master
, 、そして、すべての上流バージョンは正確にコミットされています upstream
. 。これにより、コードがアップストリームバージョンとどのように異なるかを最も簡単に見ることができます。これにより、既に上流バージョンと合併した変更などを追跡するのに役立ちます。
[wordpress-1.0]
| [wordpress-1.1]
| | [wordpress-2.0]
v v v
*--*--------+--*-+ <- upstream
\ \ \
+--*--*--*--*----*--* <- master
これが役立つことを願っています。さらに質問がある場合はお知らせください。