1

GIT を使用するためのベスト プラクティスを探しています。これが私の問題です:

BASE プロジェクトがあり、クライアントごとにクローンを作成します。これらのプロジェクトは非常に似ているため (一部の構成ファイルとイメージのみが変更されます)、各 Web プロジェクトは異なるディレクトリに保存されます。

したがって、ベスト プラクティスは、基本プロジェクトのクローンを作成し、いくつかの変更を加えて、新しいクライアント ディレクトリにアップロードすることだと思います。

ここまでは問題ありませんが、重大なバグを見つけた場合、またはプロジェクトのすべて (または一部) に新しい機能を追加した場合、変更をマージするにはどうすればよいですか? パッチなどを作成する必要がありますか? どのように?

私はGITマスターではないので、わかりやすい回答をお願いします(しかし、学びたいです!)

どうもありがとうございました!

4

2 に答える 2

3

一部またはすべてのクライアント リポジトリ (ベース リポジトリ) に組み込みたいベース リポジトリ (クライアント リポジトリ) の変更に応じて、オプションを比較検討することをお勧めします。

変更を組み込む先がクライアントであり、必要な変更がベースにあるとします。ベース リポジトリを指すリモートがあるとします。したがって、クライアント リポジトリでは、次のようになります。

git remote add basepro <url>

遭遇する可能性のあるいくつかのケースを次に示します。

  1. すべてまたは一部のクライアントに組み込みたい基本的な変更/主要なバグ修正をベース リポジトリに加えます。ベースリポジトリもローカルであり、コミット履歴を書き換えても影響がない場合は、リベースを検討できます。

    git rebase -i basepro/master
    

    これにより、ベース プロジェクトとクライアント プロジェクトの最後の共通コミットに戻り、クライアント プロジェクトに対して行ったすべてのコミットを 1 つずつ適用します。ただし、いくつかの変更を手動でマージして続行する必要がある場合があります。

    git rebase --continue
    

    クライアント固有の変更に取り掛かる前に、ベースにその機能があるかのようにコミット履歴を表示したい場合は、Rebase が役に立ちます。他のクライアント プロジェクトでは、同様に、リベースしたいブランチにリベースしたり、リベースしたい特定のコミットにリベースしたりする場合があります。

  2. ベース リポジトリ内の特定のコミットのみをクライアント リポジトリに適用するか、あるクライアントの特定のコミットを別のクライアントに適用する必要があります。

    git cherry-pick -Xpatience <commit>
    

    コミットの範囲を指定することもできます。

  3. client1 と client2 に同様のファイルがあり、どちらも base のファイルに基づいています。ここで、これらのファイルを 2 つのクライアントでマージして、別のクライアントを作成します 3.

    この場合、使用したい場合があります

    git merge-file <client1file> <basefile> <client2file>
    

    マージされたファイルは に書き込まれclient1fileます。この場合、checkoutクライアント 3 リポジトリにいるときに、まず必要なファイルを作業ツリーに入れる必要があります。

    git checkout baserepo/master -- basefile
    

    ベースファイルをチェックアウトします。

  4. git merge ベースにクライアントに必要な機能がいくつかあり、それがクライアントの独立した開発に影響を与えない場合、またはブランチを現在のブランチに直接マージしたい場合に頼ることができます。念のために、競合が発生した場合にクライアント リポジトリの変更を保持するか、手動で修正するために、私たちの戦略を使用することをお勧めします。

    git merge -s ours baserepo/master
    
  5. この回答で説明されているように、パッチを適用することもできます。

于 2013-07-11T22:22:02.103 に答える
1

あなたができることは、他のリポジトリをリモートとして追加し、チェリーピックの変更をそれらに追加できることです。

 git remote add project <address>
 git checkout project master
 git cherry-pick <sha1>
于 2013-07-11T14:41:47.710 に答える