9

Gitを使用して維持されていたプロジェクトを継承しました。ある時点で、コードは3つの別々のシステムにデプロイされ、各システムは独自の分散型Gitリポジトリを維持していました。

3つのシステムはそれぞれ、元の基本システムを3つの異なる方向に拡張しました。3つのシステムのいずれも互いに同期されていません。一部の変更はマスターブランチにあり、その他は新しいブランチにあります。

3つの異なるソースをまとめて、次のことができるようにするにはどうすればよいですか。

  1. 使用する共通ベースを見つけます。
  2. 3つのシステムすべてに適用する必要があるバグ修正がどの変更であるかを調べます。と
  3. 共通のブランチが1つだけになるように、3つのシステムを適切な方法で維持し、3つの異なるシステムに必要なカスタマイズを分離しますか?
4

2 に答える 2

13

おそらく、すべてのリポジトリを中央リポジトリの個別のブランチにプッシュすることから始めます。そこから、ブランチ間で簡単にリベース、マージなどを行うことができます。

git-agegitnubgitxgiggleなどの優れた視覚化ツールは驚異的に機能しますが、分岐点を見つけられない限り、おそらく作業はかなり退屈になります。すべてのブランチに同様のパッチが適用されている場合は、(インタラクティブな)リベースを使用して、コミットが同じ順序になるように並べ替えることができます。次に、ブランチを「圧縮」し、コミットをマスターに配置してブランチポイントを上に移動できます。rebase を使用してコミットを並べ替える方法についての優れた説明は、こちらにあります

Git Howto Indexが提供するリンクに、実行する必要があるアクションが記載されている可能性があります。優れたチート シートは、いつでも手の届くところにあると便利です。また、Eric Sinks の投稿「DVCS and DAGs, Part 1」のフォローアップには、何か役立つ情報が含まれているのではないかと思います (そうではありませんでしたが、興味深い読み物でした)。

追加の便利なリンクは次のとおりです。Git MagicGit Ready、およびSourceMage Git Guide

すべてのレポに、各パッチの目的を伝える適切なコミットメッセージがあったことを願っています。それはそれかコードレビューです:)

カスタマイズを維持する方法については、次のことがうまくいきました。

汎用コードからカスタマイズされたコードを分離する (または分離しておく) ことから始めました。次に、2 つのアプローチを試しました。どちらもうまくいきました:

  1. すべての展開には、カスタマイズが保持された独自のリポジトリがありました。
  2. すべての展開は、「カスタマイズ」リポジトリに独自のブランチを取得しました。

最初のデプロイの後、2 番目が事実であることがわかったので、カスタマイズされたリポジトリ (alt. 1、現在使用しているアプローチ) とベース/コアでの重複を減らすために、将来のカスタマイズ/カットポイントを予測することに時間を費やしました。レポ。

はい、コアとカスタマイズの分割がずれていることに気付くたびに、容赦なくリファクタリングを試みます:)

于 2009-03-03T09:29:10.113 に答える
4

わかった。かなりの苦労の末、なんとかやり遂げました。同様のタスクに着手する他の人にとって、それには多くのことが含まれます。

git リベース

コマンドと物事が台無しになったとき:

git reflog

に続く

git reset --hard HEAD@{ref}
于 2009-03-12T13:09:58.977 に答える