最近、GIT-SVN ブリッジについて多くのことを読んで、自分で試してみましたが、どういうわけか、物事が荒くなると失敗します。
環境 私たちは 2 つのチームです。一方は SVN を使用し、もう一方は Rebel で GIT を使用します。同期するために、2 つのリポジトリ間にブリッジを作成しました。SVN チームには x 人の開発者が 1 日に 10 回プッシュし、ほとんどが赤いビルドを持っています。GIT チームには 6 人の開発者がいて、週に 1 回だけフェッチするか、コミットするものがあるときにビルドをほとんどグリーンに保ちたいと考えています。
ユースケース: 「ブリッジ」は (まだ) 自動化されていないため、自分のコンピューター上にあるため、ブランチをマージして正しくコミットする責任があります。そのため、GIT チームは 2 つに分かれています。一部はブランチ「branch1」で作業し、残りは「branch2」で作業しています。それらは常にペアで機能するため、「branch1」が完了すると、次のタスクのために別のブランチを作成します。
私がやろうとしたこと: 明確にするために、「masterSpace」というマスターからブランチを作成しました。私は毎朝 master で git-svn rebase を実行し、変更を masterSpace にマージします。開発者は、必要に応じて、開発者が何かをコミットする場所で、masterSpace の「branch1」から作成します。それらが完了したら、SVN ですべてをコミットする必要があります。私はこのようにしてみました
merge "branch1" into "masterSpace".
checkout master
git svn rebase
git rebase masterSpace
git dcommit
git checkout masterSpace
merge "master" into "masterSpace".
次に、開発者はこの masterSpace からすべてを最新の状態にして新しいブランチを作成し、プロセスを繰り返します。
問題: 単一のコミットを持つブランチでこれを試してみましたが、うまく機能しましたが、2 週間ほどの作業の後、状況が悪化し、ワークフローが失敗しました。私が decommit した後、同じコミットが master と "masterSpace" で異なる ID を持っていたので、次に decommit しようとしたときに、多くの競合が発生しました。master を masterSpace にマージした後でも。次のような簡単なシナリオも試しました。
I have a "branchX" with changes
I merge them on "masterSpace"
rebase them on master and finally dcommit them.
Then I made a single change on "masterSpace"
I rebased it into "master"
この後、私は 10 コミット先のようでした (前のコミットの ID のためだと思います)。だから...行き止まり
Q1: 解決策は? GIT チームと SVN チームの両方が同期して平和的に作業できるように、環境とユースケースの正しいワークフローは何でしょうか? 「masterSpace」は冗長で、思ったように動作しないと判断しました。それでも、チームが時間やコードを無駄にしないように、dcommit の迅速な解決策を見つけなければなりません。役立つ情報: ブランチは約 2 週間ごとに変更されます。終了したら、使用したブランチを破棄して、マスターから別のブランチを作成できます
Q2: すべてを自動的に作成する方法は? 近い将来、「橋」を Jenkins に移す予定です。自動的に機能させるための解決策を見つけることは可能でしょうか? 「jenkinsbranch」のブランチをマージするようなもの。Jenkins はこのブランチを自動的にビルドします。緑色の場合はコミットしません。そうでない場合は、ビルドを修正する別のプッシュを待ちます。
私の最初のシナリオでは、「masterSpace」をジェンキンの「マスター」として使用する予定でした。開発者は自分のブランチを「masterSpace」にマージし、jenkins は svn-rebase を作成して自動的にビルドし、緑色の場合はすべての変更を dcommit します。それ以外の場合は、開発者がビルドを修正するのを待ちます。でも…どうやら私が間違っていたようです。
TL:DR チームが 2 つの異なるブランチで数週間作業し、SVN でコミットを解除したい (そして SVN と同期したい) 場合、通常のワークフローはどうなりますか?