6

簡単に:

2つ(またはそれ以上)の「開発の流れ」/環境を相互に追跡し、完全に収束することなく、相互に変更を双方向に送信し、特定の重要な重要な違いを維持したいですか?

詳細、1 つの特定の例:

以下に特定の例を示します。

私はホーム ディレクトリ glew-home のバージョン管理を 28 年間行ってきました。RCS、SCCS、多くの RCS ラッパー、CVS、SVN、Monotone や Darcs、bzr、git、そして現在の Mercurial などの初期の DVCS による短期間の実験。必要に応じて git や bzr に戻りますが、現時点では主に Mercurial を使用して満足しています。

現在、私のホーム ディレクトリは、多くのシステムで似ていますが、同一ではありません。最大の違いは、Cygwin と動作中のさまざまな Linux の間にあります。私はそれらをできるだけ似せようとしますが、違いが生じ、多くの場合、それらを維持する必要があります。

違いの簡単な例を次に示します。Cygwin では、私の個人所有のラップトップでは、~/LOG は ~/LOG.dir/LOG.cygwin.glew-home へのシンボリック リンクですが、職場では ~/LOG は何かへのシンボリック リンクです。 ~/work/LOG.dir/LOG.work のように。

理由: プロプライエタリなものはすべて機能し続ける必要があります。~/work は別のリポジトリ ~/work/.hg であり、プッシュ/プルされたり、パーソナル コンピューターと同期されたりしません。

問題: これらのシンボリック リンク (および他のいくつかのファイル) を別々に保ちたい。しかし、他のすべてのファイルを同期したい。私は両方の場所で自分の環境に変更を加えます。仕事で ~/.emacs に変更を加えた場合は、それを家に送りたいと思います。

Q: これを最も便利に行うにはどうすればよいですか?

古き良き時代には、共通のリポジトリ、たとえば共通の CVS リポジトリを使用していました。CVS はシンボリック リンクを処理しませんが、CVS に格納されたテンプレートからシンボリック リンクを生成するスクリプトを作成したとします。~/LOG のシンボリックリンクテンプレートが cygwin-laptop と仕事用に異なるブランチを持つように手配します。ほとんどのファイルが対応する RCS/CVS リポジトリの同じブランチを指すようにワークスペースを作成しますが、cygwin-linux と work の間で異なるファイルには、対応するブランチが対応するワークスペースにチェックアウトされます。

これは機能しましたが、維持するのは少し面倒でした。

Mercurial (または Got、Bzr) などの最新の DVCS でこれを行う良い方法がわかりませんでした。

これらの最新の DVCS ツールは、ファイルごとの分岐ではなく、リポジトリ全体の分岐を行います。彼らは、ほとんどのファイルで同一であるが、特定のファイルのみが異なる 2 つのブランチの概念を理解していません。

2 つのブランチを追跡しようとすると、常に本質的な違いが伝播されてしまいます。

Makefile を提案する人もいます。魅力的ではありません。

本質的な変更をベース回転数に加え、常にリベースすることを検討しました。しかし、リベースはあまり好きではありません。

より良いアイデアをいただければ幸いです。

キルト?

4

1 に答える 1

4

git ではmaster、すべての共通ファイル (場合によっては、一部のデフォルト状態の異なるファイル) と、またはのようなカスタマイズされたブランチを含むブランチを維持できます。workcygwin

すべてのマシンに伝播する必要がある変更を行いたい場合は、master. 何かを作業/cygwin マシンだけに送りたい場合は、適切なブランチで行います。

カスタマイズされたブランチがチェックアウトされmasterているマシンから新しい変更をプルする場合は、そのブランチに出入りする必要があります。git merge mastergit rebase master

どちらを使用するかは好みの問題です。結果の作業ディレクトリは同じで、履歴のみが異なります。を使用すると、カスタマイズされたブランチを からの変更でmerge更新したときに常に表示されます。これを使用すると、すべてのカスタマイズが master の先端から分岐しているように見えます。まるで最初に master ですべてを実行し、その後でカスタマイズをコミットしたかのようになります。masterrebase

残念ながら、他の DVCS については経験がないのでわかりませんが、git のこの手順は非常に簡単だと思います。

于 2012-08-03T06:31:52.813 に答える