5

私は bazaar を始めたばかりで、チェックアウト機能が私の作業方法に最も役立つことがわかりました。つまり、「マスター コピー」から c/o し、開発を行い、変更を新しいディレクトリ。これにより、「マスター コピー」が更新されます。

しかし、(たとえば) 2 つのプロジェクトに取り組んでいて、コードの異なる部分を変更しているとしたら? 言う:

~/master                - master copy
bzr co master ./gui
bzr co master ./engine

だから私は ./gui ディレクトリで gui 関連のものを、./engine で内部のものをやっています。変更をコミットするにはどうすればよいですか? 最初に gui をコミットし、次にエンジンをコミットすると、エンジンで競合がフラグされると思いますか?

GUI とエンジンをマージしてから、マスター コピーに対して 1 回だけコミットする方法はありますか?

もう少し複雑にするために、これを行うとどうなりますか:

bzr branch gui ./mouse

今、私はおそらくマウスだけでなく、GUI にも取り組んできました。GUI とマウスのコードをマージしてマスターにコミットしたい場合、これを管理する最善の方法は何ですか? または実際、もし私も:

bzr branch gui ./keyboard

変更された GUI、キーボード、およびマウスを変更した場合、階層的にマージする必要があります (つまり、マウス + キーボード)。これを GUI とマージしてから、GUI をマスターにコミットしますか?

私が何を達成しようとしているのかが明確になることを願っています!お時間をいただきありがとうございます。

4

2 に答える 2

6

2つのチェックアウトがある場合、一方に変更をコミットするときはいつでも、最初にもう一方から変更をプルダウンする必要があり、各ステップで競合を解決する必要がある可能性があります。時間の経過とともに競合を解決し、コードがあまり分岐しないようにする方が簡単なので、これは一般的には良い考えです。

ただし、「gui」と「engine」で別々の開発者が作業するようにしたい、または両方のブランチでの開発が完了するまで競合解決を保存したいようです。この場合、おそらく「bzrブランチ」を使用して独立したブランチとして作成する必要があります。各ブランチはローカルコミットを使用でき、相互の競合について心配する必要はありません。次に、マージするときは、3つの方法のいずれかを実行できます。これらはすべて同じ最終結果を取得します。

1. 1つのブランチを別のブランチにマージしてから、マスターにプッシュします。

cd gui
bzr merge ../engine
# manually fix any conflicts
bzr commit
bzr push #back up to main

上記の方法の欠点は、「gui」ブランチに「engine」の変更が含まれていることです。メインラインに押し戻された後、両方のブランチを破棄する場合は、これで問題ありません。ただし、ブランチを長く保持したい場合は、次のことができます。

2.メインラインにマージします。

cd master
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit

これには、「gui」と「engine」が別々のブランチとして残っているという利点がありますが、両方が一緒に機能することを確認する前に、一方をマスターにコミットする必要があります。だからあなたは本当におそらくしたい:

3.マージブランチを作成します。

bzr branch ~/master gui-engine-merge
cd gui-engine-merge
bzr merge ../gui
bzr commit
bzr merge ../engine
# manually fix conflicts
bzr commit
bzr push ~/master
# since this branch was only for merging, you don't need it anymore:
cd ..
rm -r gui-engine-merge
于 2009-08-20T16:34:31.453 に答える
0

はい、bzrは、競合を検出した場合にエンジンリポジトリから変更をチェックインできないようにする必要があります。通常、チェックインの直前に最初に「bzr up」を実行してから、自分のものが他の人とうまく機能することを確認します。

あなたの質問の2番目の部分であるマウス/キーボードのブランチを扱うことに関しては、これは私が通常それを行う方法です。単にGUIディレクトリにcdして、次のようにします。

bzr merge ../mouse

変更をマージした後、guiディレクトリからコミットすると、変更セットが「master」ディレクトリに送信されます。

私はbzrの専門家ではないことに注意してください。しかし、これは私がSVNリポジトリを扱ってきた方法です。

于 2009-07-25T17:02:32.987 に答える