2009-09-16 19 views
11

私はGITの新しい人ですが、それが私のニーズにどれくらい合うかをまだ知りませんが、印象的です。1つのプロジェクト、gitを使用している複数の顧客ですか?

私は貴様の顧客(ジャンゴ+ジャバスクリプト)のために使用し、単一のWebアプリケーションを持っている

私は枝のようにこれらの貴様の顧客のバージョンを処理するためにGITを使用する予定。各顧客は、カスタムファイル、フォルダ、設定、改良版などを持つことができますが、同じ「コア」を共有する必要があります。私たちは小規模なチームで、githubアカウントを設定しています。

このケースを処理するにはブランチが適していますか?

設定ファイルについて、どのように進めますか?あなたは.gitignore顧客固有の設定ファイルを追加し、settings.xml.sampleファイルを追加しますか?

また、一部のファイルがマスターにマージされないようにする方法はありますか? (しかし顧客支店に約束した)。たとえば、ある顧客データを顧客ブランチに保存してから、そのマスタがマスターにコミットされないようにする場合は、idを使用します。

.gitignoreファイルはブランチ固有ですか? YES

EDIT (ありがとう!)すべてのあなたの答えを読んだ後、私は最初のアプリをサブフォルダにコアと私の貴様のアプリを隔離するために私のDjangoのプロジェクト構造をリファクタリングすることを決めました。これにより、よりクリーンなプロジェクトが作成され、.gitignoreファイルを調整することで、gitブランチを使用してさまざまな顧客や設定を簡単に管理できるようになります。

Ju。

答えて

6

cpharmstonの回答に加えて、クライアントごとに本当にカスタムであるものとそうでないものを分けるためにリファクタリングを行う必要があるように思えます。次に、追加のリポジトリを追加して、各クライアント(ブランチではなく全く新しいリポジトリ)のカスタマイズを追跡することを検討することができます。次に、デプロイメントによってメインのリポジトリから "コア"を取得し、そのリポジトリからクライアント固有のものを取得することができます。

+0

Ok thanx;今は物事を分けることを考えることに集中していますが、プロジェクトが既に巨大であるため、これは簡単ではありません。 あなたの提案には、顧客固有のreposを含むメインコアリポジトリがあります(gitサブモジュールを提案しますか?)。 github擬似フォークはどうですか? – jujule

+0

gitサブモジュールが機能するかもしれません(私はそれらを使用していません)。しかし、顧客レポをチェックアウトするときに、メインレポをチェックアウトするように設定する必要があります。 –

+0

@MatthewTalbert素晴らしい答えをありがとう。上記のコメントでは、お客様のレポをチェックアウトする際にフックを使用してベースレポをチェックアウトすることができます。またはそれは、コードをマージすると、他の後にreposをチェックアウトするデプロイスクリプトのようなものでなければなりません? – happyhardik

6

私はあなたがしようとしていることを達成するために支店を使用しません。

ソースコントロールでは、ブランチは、トランクにマージされることを目的としたものに使用されることを意図しています。たとえば、Alex Gaynorallows for support for multiple databasesのDjangoブランチで作業していたsummer of codeを最終的にDjangoトランクに戻すことを目標にしていました。

チェックアウト(または、Gitの場合)は、あなたがしようとしているものに適しています。プロジェクトのすべてのベースファイル(および必要に応じて.sampleファイル)を含むレポを作成し、コードを展開するさまざまな場所すべてにレポをクローンします。次に、各展開で構成ファイルとカスタマイズファイルを手作業で作成します(addをリポジトリに適用しないように注意してください)。レポ内のコードを更新するたびに、各展開でpullを実行してコードを更新します。ビオラ!

+1

これは、基本的に、バージョン管理下にない多くの重要なファイルで終わることを意味します。 – innaM

+0

Thanx;このセットアップの唯一の問題は、私の顧客固有のファイルがgitに保存されないということです。そして私はそれでうまくいく気がしません。 – jujule

+0

顧客固有のファイルがソース管理下の別々のフォルダにあるように簡単に設定できます。または、フロッピーディスクをバックアップすることができます; –

1

Matthew Talbertは正しいですが、実際にカスタムのものを非カスタムのものから分離する必要があります。 1つのディレクトリに含まれるすべてのコアコードをリファクタリングすることができれば、クライアントは読み取り専用のgitサブモジュールとして使用できます。追加のメリットは、コアコードの明示的なバージョンにそれらをロックすることです。これは、プロダクションコードのために意識的に新しいリビジョンに更新する必要があることを意味します。

+0

私のプロジェクトはdjangoベースですので、そこには異なるファイルとフォルダを持つ共有ルートフォルダがあります。サムは顧客固有のもので、他のものはありません。私はサブモジュールのdocにする必要があります! – jujule

+0

Djangoには、 "共有ルートフォルダ"またはプロジェクトディレクトリは必要ありません。設定ファイル、ルートURLconf、Pythonのsys.pathのどこかにインポート可能なアプリケーションがあれば、好きなように構造化することができます。 「コア」プロジェクトディレクトリとクライアントカスタマイズのための完全に別個のディレクトリを持つことは難しくありません。 –

1

その他の回答は、カスタムコードごとにコアコードを区切ってメンテナンスするのに最適な形になります。しかし、私は群衆から離れて、あなたがそれをすることができないと言うと(特定のクライアントのコアコードに特別な機能を追加する必要があるため)、DVCSブランチはあなたがしたいことに対してうまく機能する。私はたぶんこの目的のためにレポ・ブランチではなくディレクトリごとのブランチをお勧めしますが(gitはディレクトリごとのブランチを行うこともできますが、それは分岐するクローン・レポだけです)。

私はgitではなくhgを使用していますが、私のDjangoプロジェクトはすべて、ユーティリティスクリプト、INSTALLED_APPSの基本的な共通セットを持つ同じベースの "プロジェクトテンプレート"リポジトリからクローンされています。それらの共通の更新を既存のプロジェクトに簡単にマージすることができます。これはあなたが計画しているものとまったく同じではありませんが、似ています。特定のクライアントに対して既にカスタマイズしたコア内の同じコード領域を変更すると、時にはマージ競合に対処する必要があります。

+0

あなたの別のPOVを共有してくれてありがとう。 djangoプロジェクトで顧客固有のコードを処理する方法は?あなたの水銀のディレクトリごとのブランチであるカスタムアプリ? プロジェクト構造全体を再編成するのに少し時間がかかる – jujule

+0

それぞれのDjangoプロジェクトは特定のクライアント向けです。私はできるだけ多くの機能を、多くの異なるプロジェクトで使用できる再利用可能なアプリケーションに入れました。クライアント特有のものだけが実際のプロジェクトリポジトリに入りました。 –

0

すべての解答(感謝!)を読んだ後、私は最初に私のdjangoプロジェクト構造をリファクタリングして、アプリケーションのサブフォルダにコアと私の異なるアプリケーションを分離することに決めました。これにより、よりクリーンなプロジェクトが作成され、differentsブランチファイルの.gitignoreを調整することにより、gitブランチを使用して異なる顧客や設定を簡単に管理できるようになります。

関連する問題