web-dev-qa-db-ja.com

マージを実行せずにトランクからブランチを更新できますか?

私はおそらくこれをまったく考えたことがないか、おそらく単にSubversionの既存のオプションを知らないだけです(私は確かに専門家ではありません)。

trunkの最新のリビジョンを使用せずにブランチを最新の状態に保つ簡単な方法があるかどうか、私が疑問に思っているのは、新しい機能の作業を開始するブランチを作成したかどうかだけです。一連のリビジョンをマージするという面倒な問題をすべて解決します。コミットされた変更はブランチにのみ影響を及ぼしますが、トランクからすべてのリビジョンを更新して取得できるようにしたい(もちろん、およびブランチ)。これは可能ですか?私が求めていることは意味がありますか?

これは、一連のリビジョンをマージすることと必ずしも異なるわけではないと思います。私が使用するのは、AnkhSVNを使用することだけです。AnkhSVNは、マージを許可する前にこれらすべてのベストプラクティスチェックを実行します。必要以上に複雑に感じる場合もあります。アイデアは、他の開発者がトランクに行っている可能性のあるコミットでブランチを最新の状態に保ち、最終的にdoブランチをトランクにマージすると、すべてが( )スムーズに(可能な限り)。

34
Dan Tao

最新のトランクチェックインでブランチを最新の状態に保つことをマージと呼びます。

マージは時として王室の悪夢になる可能性があることは知っていますが、まさにこれがマージです。

33
Jack Marchetti

TL; DR;マージする必要はありません、ここにいくつかの指示があります

それはあなたが思っているほど悪くはありません。使用するコマンドラインからの手順の概要を説明します。私は、Vimidiffを使用して、Meldまたは他の好きなdiffツールを使用して競合を管理します。コマンドの前にはハッシュ「#」マークが付きます

<in branch first time from copy>
# svn log --stop-on-copy | tail 
<read the revision that was the copy instruction in this case r229>
# cd ../../trunk
# svn up
<I make note of the latest rivision which is r334>
<now I go back to the branch>
# cd ../branches/branch 
# svn merge -r229:334 svn://url.to.svn.server/project/trunk
<a whole bunch of stuff happens>
< now I check for conflicts >
# svn status | grep ^C
<which outputs something like>
C       public/tools/Diagnostic.class.php
C       public/domain/Report_Setup_Parameter.class.php
C       public/modules/mReports.module.php
<I now revert all these and manually merge them>
# svn revert public/tools/Diagnostic.class.php
...
<revert done now manuall doinng the merge
# vimdiff public/tools/Diagnostic.class.php ../../trunk/public/tools/Diagnostic.class.php
...
<now all the changes are done>
# svn commit -m "Merging trunk into branch 'branch' r:229:334"
commited revision 335

完了しました。定期的に行う場合、多くの変更はありません。最初のマージの後、最後のマージのリビジョン番号を使用する必要があります。したがって、将来のある時点で、コマンドはsvnログを調べて、最後のマージのリビジョンがいつなのかを見つけます(この場合は335)。マージコマンドは次のようになります。

# svn merge -r335:370 svn://url.to.svn.server/project/trunk

他のすべての手順は同じです。

25
flaxeater

アイデアは、他の開発者がトランクに行っているコミットでブランチを最新に保ち、最終的にブランチをトランクにマージしたときに、すべてが(できるだけ)スムーズに(可能な限り)実行したいというものです。

これを実現するには、トランクから範囲改訂マージを行う必要があります。実際、この種のマージをブランチに行って、トランクで何が行われているのかを最新にしておくことをお勧めします。

AnkhSVNのツールについては知りませんが、「純粋な」SVNにはマージ操作を非常に簡単にする非常に優れたツールがあります。 TortoiseSVN はWindowsに最適なツールであり、必要に応じて Netbeans マージのグラフィカルサポートも非常に優れています。

3
pajton

PHPStormを使用している場合は、GUIインターフェースを使用してみてください https://www.jetbrains.com/help/idea/2016.1/integrating-changes-to-from-feature-branches.html

0
max4ever

私はAnkhSVNに精通していませんが、あなたが説明しているのはまさにsvn mergeのためです。だからあなたの質問への答えはノーです。

ただし、--reintegrateオプションを使用して、それがあなたの人生を楽にするかどうかを確認します。

次のブログ投稿を参照してください。

Subversionマージ再統合
一言で言えば、Subversion 1.5マージ追跡

0
Michael Hackner