カスタム変更されたオープンソースソフトウェアを最新に保つためのGitワークフロー?

StackOverflow https://stackoverflow.com/questions/3823731

質問

私たちの大学は、管理するサーバー上のキャンパス部門に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つの枝を持つことです。 upstreammaster. 。リポジトリを作成します(から始めます 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 

これが役立つことを願っています。さらに質問がある場合はお知らせください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top