2017-08-03 10 views
7

私の質問はMercurial: List all unmerged branchesに似ていますが、SVNではMercurialではありません。Subversion:すべてのアクティブな結合されていないブランチのリストを取得する方法

現在マージされていない現在開いているブランチ(通常はトランク)をすべてリストする方法を見つける必要があります。

は、私の知る限り承知しているとして、Gitので同等の機能を明確にするためgit branch --no-mergedgit branch --merged

ですが、私は他の多くのStackOverflowの質問を持っているように、マージされていないリビジョンの一覧を求めてないよ過去に尋ねられた

アクティブブランチがまだマージされていないすべてのソリューションを受け入れることができます。これが不可能な場合は、がすべてブランチにマージされていることを示す回答を受け入れ、私は後方に働くことができます。

私はrepo/trunk上だし、レポは、これらの枝を持っている場合たとえば、:

  • repo/branches/b1はトランク
  • repo/branches/b2にマージされていない
  • repo/branches/b3をマージされましたが、以前に削除されましたリビジョンとマージされた後に削除された
  • repo/branches/b4をマージされていなかった

解決策は、b1またはb2のいずれかを返す必要がありますが、b3またはb4を返さないでください。

+0

シナリオでブランチを「アクティブにする」ものを定義できますか?最近のコミット?それが分岐して以来、少なくとも1つのコミット? –

+0

@PatrickQuirkブランチは、HEADリビジョンに存在する場合、アクティブであると見なすことができます。 – BoffinbraiN

+0

'repo/branches /'にすべてのディレクトリをリストするスクリプト/バッチを作成しようとしましたが、マージする必要があるものがあれば 'svn mergeinfo'を使ってそのそれぞれをチェックしますか? – royalTS

答えて

1

まず、あなたはHEADリビジョンにリストにすべての枝を取らなければならない:

svn list repo/branches/ -r HEAD 

をそして、あなたは結果をループするために持っている、とmergeinfoを確認してください。私はマージする最初のリビジョンが利用可能に見たときに、それを終了したいので、ここではリビジョンサブルーチン:私はを使用してい

@echo off 

for /f %%b in ('svn list repo/branches -r HEAD') do call :revisions %%b 

exit /b 

:revisions 
for /f %%r in ('svn mergeinfo --show-revs eligible repo/branches/%1 repo/trunk') do (
    echo repo/branches/%1 
    exit /b 
) 

:ここではあなたに* .BATファイルを保存することができますスクリプトです。そのため、このプログラムは重複したブランチを印刷しません。

+0

あなたのコマンドは実際にはHEADのすべてのブランチを表示します。それは非常に簡単です。しかし、それは私が必要なものではありません。私は、トランクにマージされていないブランチのサブセットを見たいだけです。 – BoffinbraiN

+0

私の悪いです。私は解決策を決めました。 – Przemek

+0

うまくやった!私は古いSVNリポジトリでこれをテストしました。新しいブランチを作成し、そのブランチをトランクにマージします(リストを削除する)。そのように答えておけば、すぐにたくさんの担当者がいるでしょう。 :) – BoffinbraiN

関連する問題