52

gitリビジョン管理に使用するオープンソースのプロジェクトがあります。まもなく、プロジェクトのプレミアム ホスト バージョンもリリースする予定ですが、オープン ソース バージョンには存在しないはずのプレミアム ホスト バージョン専用のコード (パフォーマンスなど) に変更が加えられる予定です。

オープン ソース バージョンのバグを修正すると、そのバグはプレミアム ホスト バージョンにもある可能性が高いため、2 つの別個のディレクトリ/プロジェクトを作成することは避けたいと考えています。私は2つの場所で変更を加えたくありません。

これを管理する最善の方法は何ですか? 一部のファイルには 2 つのバージョン (オープン ソース バージョンとプレミアム ホスト バージョン) が必要なため、単に分岐するだけでgitは正しく機能しません。

4

2 に答える 2

41

それでも、分岐は機能するはずであり、2 つの別々のバージョンを維持できるようになります。

プレミアム バージョンに当てはまるバグがある場合は、 で修正し、ブランチmasterでマージしてください。Git は、 と の間で分岐してから変更されたもの、つまりバグ修正 のみをマージします。 ホットフィックスを公開する別の方法として、共通の祖先から公開する方法があります。「ホットフィックスを複数のブランチにマージする Git 」を参照しください。premium
masterpremium
masterpremium


2015 年更新: git 2.5 (2015 年 7 月) はgit-new-workdir、以下に示すものを新しいコマンドに置き換えましたgit worktree add <path> [<branch>]

詳細については、「Git で複数の作業ディレクトリを使用しますか?」を参照してください。


元の回答2012:

me-andは、コメントでコマンド git-new-workdirについて言及しています。
見る:

これに対する 1 つの解決策は、リポジトリの別のローカル クローンを作成することです。Git は、ローカルで複製するときに自動的にハード リンクを使用するため、複製は非常に高速です。
しかし、これには 1 つの問題があります。最新の状態に保つ必要がある別の別のリポジトリができてしまいます。

ここでgit-new-workdir出番です。
リポジトリの完全なクローンを作成する代わりに、(独自のインデックスを使用して) 新しい作業ディレクトリをセットアップするだけです。
実際のリポジトリ自体は、元の作業ディレクトリと新しい作業ディレクトリの間で共有されます。これの意味は:

  • 1 つのリポジトリを更新すると、新しいコミットは他のすべての作業ディレクトリでも即座に表示されます。
  • 作業ディレクトリの 1 つに新しいコミットまたはブランチを作成します。それらはすべての作業ディレクトリですぐに利用できます。

注: コミットは自動的に存在しますが、同じブランチをチェックアウトした場合、Git は作業コピーを更新しません。あなたは自分でそれをしなければなりません。

于 2012-08-28T06:00:15.870 に答える