3

私はこのような構造のアプリ(cms)を持っています:

BASE:
    /application/
    /public/
        themes/
           default/
           mobile/

これは、すべてのプロジェクトのベースとなる中央リポジトリです。次に、プロジェクトは独自のスキンを取得します:(テーマに基づいています/default/

CLONE1:
    /application/
    /public/
        themes/
           default/
           mobile/
           own/
           ...
           own-theme-12/

(このアプリには、デフォルトのテーマに基づいた12のカスタムテーマがあります)。

すべては、アプリケーションを維持し、すべてのクローンをBASEで最新の状態に保つことです。

ここで、BASEをリモートリポジトリとして追加します。

(/clone1/)$ git remote add base-repo /path/to/base.git

次に、必要に応じて更新を取得します。

(/clone1/)$ git pull base-repo develop

.phpファイル/applicationが変更されると、すべてがうまく機能します。default問題は、BASEリポジトリのテーマのファイルを変更したときに始まります(たとえば、タイプミスreset.css)。CLONE1/defaultテーマとすべてのテーマの変更が必要CLONEx/own-x/です。

もちろん、変更をコピーしてコミットする場所を指示するためにいくつかのbashスクリプトが必要になりますが、マージの競合なしに全体を同期させる方法はありますか?

を使用しますgit flow。現在、テーマdefaultmobileテーマは別々のブランチにはありません。それらが必要ですか?サブモジュールはまだ使用していません。

このワークフローを整理する方法はたくさんありますが、最適なものとしてどれを選択しますか?

4

2 に答える 2

2

git-subtreeを使用して、この種の問題を解決できます。基本的には、アップストリーム アプリに基づいてカスタム アプリを構築することです。カスタム アプリには、アプリの修正と特別なテーマの 2 種類の変更があります。アプリの修正を取得してアップストリームに送信したいが、特別なテーマをアップストリームに送信したくない.

トップレベルで 2 つのサブツリーを作成する場合: 1 つはアップストリーム アプリ用、もう 1 つはテーマ用で、git-subtree を使用してそれらを分割/結合できます。アップストリームから継承されたテーマは、アプリ ディレクトリからテーマ ディレクトリにシンボリック リンクできます。したがって、次のようなものが得られます。

    /app/code/*.php
    /app/themes/default/
    /app/themes/mobile/
    /themes/default -> ../app/themes/default
    /themes/mobile -> ../app/themes/mobile
    /themes/own-1/

アプリの変更を上流に送信する場合は、次のようにします

    git subtree split --prefix=app --rejoin
于 2011-02-25T12:08:33.893 に答える
1

アプリケーションが機能するにはこれらのテーマ ディレクトリが必要であることを考慮すると、それらはブランチとしてではなく、ディレクトリとして保持する必要があります。
複数のブランチを本番環境にデプロイすることはできません (すべてではなく、いずれかのブランチからバージョンを選択します)。複数のディレクトリをデプロイできるため、SCM に関する知識がなくてもアプリケーションを実行できます。

残りの部分については、マージ ドライバーとして実行されるスクリプトは次のことができます。

  • BASE/defaultの内容をto にマージしますlocal/default
  • 同じファイルが存在するかどうかを確認します(reset.css他のディレクトリに存在し、同じ進化を報告し始めるなど)。

正確なメカニズムの詳細はわかりませんが、マージ ドライバーは変更を伝達するための適切なエントリ ポイントであると思われます。

于 2011-01-18T13:34:22.397 に答える