私たちはSubversionを使用しており、私のような少数の個人を除いて、Subversionでの分岐とマージの経験はほとんどまたはまったくありません。私のSubversionの経験は、マージとツリーの競合が正確にまれではありませんが、解決するのがそれほど難しくない単純な機能ブランチに限定されています。
それを踏まえて、私は現在のトランクへのコミット方法が私たちのニーズに対して単純に持続不可能であるプロジェクトの管理を支援しています。ローカライズされたチームに機能の分岐とマージを導入し、ある程度の成功を収めました。ただし、単純な機能の分岐では、次のようなすべての質問に答えることができませんでした。
ここで定義されているgit-flow は、これらの質問の多くに答えるのに大いに役立つようです。 Mercurialでこのメソッドを試しましたが、そこでもこのメソッドを実装できるようです。残念ながら、DVCSへの移行はこの時点ではテーブルから外れています。
しかし、Subversionでこのメソッドを模倣する私の短い試みは、多くのマージとツリーの競合で失敗しました。マージオプションとエッジケースは非常に多く、不可解です。
Subversionを使用して git-flow を実装できますか?その場合、痛みのレベルはどれくらいですか?
nstableトランク開発メソッドと呼ばれるものを使用します。これは、Subversionの作成者がSubversionを作成したときに念頭に置いていた開発方法でした。シンプルで実装も簡単です。
これがどのように機能するかについての考えです:
いくつかのマージがあります。これは主に、リリースブランチで修正された欠陥をトランクにマージすることです。これを行うには3つのオプションがあります。
--record-only
フラグを使用してマージしない限り)。もちろん、このメソッドはplanningと呼ばれるものを使用することに気づきます。開発者が将来のリリースで作業する前に次のリリースの作業を行うように、作業に優先順位を付ける必要があります。次のリリースですべての開発者を忙しくさせるのに十分な作業がなくなった場合にのみ、分岐します。
開発者または問題ごとに開発用の個別の開発ブランチを使用する標準のGitワークフローを実装してから、それらの変更をトランクに配信実装できます。これには、開発者/機能ごとに1つずつ、多くのブランチが必要になります。
最初にトランクからブランチにマージしてrebaseコードにマージします。リベースが完了したら、--reintegrate
スイッチを使用してブランチからトランクにマージします。 1.6より前では、--reintegrate
がマージ追跡を台無しにしたため、ブランチを削除して再作成することになっていた。ただし、これはリリース1.6.x以降で修正されています。
それは大きな質問です。私はいくつかの問題を解決する方法のアイデアしか持っていません:
trunk
-私はそれをmaster
ブランチと考えています。development
ブランチは次のリリースのコードだと思いますこれらの問題のいくつかは、少なくとも部分的には、git svn
を使用することで解決できます。これを使用することで、たとえば、グローバルリポジトリに保存せずに、gitsブランチ機能を使用してローカルで実験することができます。もちろん、チームに多くのメンバーがいる新機能を検討している場合、すべてのメンバーがgitの使用とネットワークを介した相互のプルに慣れていない限り、これは興味深いことではありません。 git svn
を使用することで、git cherrypick
を使用して、1つのブランチから別のブランチに適用する単一のコミットを手動で選択することもできます(例:released-x.x-tagへの開発)。
今のところ思いつくのはこれだけです。お役に立てば幸いです。
私の活動では、次のアプローチでSVNを使用しています。
トランクは「マスター」ブランチです。トランクに直接何かをコミットしないでください。トランクは常に、本番環境でリリースされた最新バージョンと正確に一致する必要があります。したがって、トランクは常に安定したブランチを表します。トランクは、ブランチの再統合によってのみ更新されます。
あなたはあなたの仕事のために枝が必要です。すべての新しいブランチはトランクから作成する必要があるため、すべての新しいブランチは作成時に本番バージョンと正確に一致します。変更と修正はブランチでコミットされます。
少なくとも2つのメインブランチが必要です。
プロジェクト、サブプロジェクト、変更要求など、作業のメインストリームごとにブランチを作成します。並行開発で作業できます。
「統合」ブランチを作成して、リリースする必要のあるブランチを結合します。リリースの候補となるすべてのブランチを統合ブランチにマージする必要があります。したがって、統合ブランチは、たとえば、修正プログラムとプロジェクトの両方に参加できます。
統合ブランチまたはブランチ自体からアーティファクトを構築します。
ブランチをリリースしたら、そのリリースのタグを作成します。これにより、リリースされたバージョンのコピーを作成しても、ブランチを操作できます。タグでは、リリースされたバージョンのみが必要です。タグの変更をコミットしないでください!
ブランチが解放されたら、トランクを更新する必要があります。したがって、トランク内のブランチを再統合します。統合ブランチを再統合することも、ブランチを直接再統合することもできます(統合からパスしなかった場合)。
トランクが再び製品バージョンと一致したら、アクティブなすべてのブランチで報告します。
このメソッドは、実際にはgit-flowの概念のレプリカではありませんが、いくつかの要件に従います。
このアプローチでは、次の利点があります。
トランクは安定しています。あなたはいつもその瞬間にトランクが何を表しているかを知っています。
すべてのブランチには、独自の変更のみが含まれています。
統合ブランチを使用すると、単一のリリースで並列ブランチを管理できます
タグを使用すると、リリースされたバージョンのコピーが常にあります
欠点は次のとおりです。
管理する多くのブランチ。
統合ブランチへの変更を報告するために、特に頻繁にマージして切り替える必要があります
毎回解決すべき多くの対立
ちなみに、これはバージョンの制御を維持できるため、これまでに使用した中で最高のアプローチです。