2017-08-03 1 views
7

Meine Frage ist ähnlich wie Mercurial: List all unmerged branches aber für SVN, nicht Mercurial.Subversion: Wie bekomme ich eine Liste aller aktiven, nicht verbundenen Zweige

Ich muss einen Weg finden, alle derzeit offenen Zweige aufzulisten, die nicht in meinen (normalerweise Stamm) zusammengeführt wurden.

Soweit ich weiß, das äquivalent Feature in Git git branch --no-merged und git branch --merged

Zur Klarstellung, ich bin nicht für eine Liste von unmerged Revisionen zu fragen, wie viele andere Stackoverflow Fragen in der Vergangenheit gefragt.

Ich werde jede Lösung akzeptieren, die in der Lage ist, alle aktiven Zweige, die noch nicht zusammengeführt sind, aufzulisten. Wenn das nicht möglich ist, dann werde ich eine Antwort akzeptieren, die alle aktiven, fusionierten Verzweigungen auflistet, so dass ich rückwärts arbeiten kann.

Zum Beispiel, wenn ich auf repo/trunk und die Repo hat diesen Zweig:

  • repo/branches/b1 wurde in dem Stamm nicht fusionierte
  • repo/branches/b2 hat
  • repo/branches/b3 verschmolzen in einem früheren gelöscht Revision und wurde nicht verschmolzen
  • repo/branches/b4 wurde nach dem Zusammenführen gelöscht

Ihre Lösung sollte entweder b1 oder b2 zurückgeben, aber niemals b3 oder b4 zurückgeben.

+0

Können Sie definieren, was einen Zweig in Ihrem Szenario "aktiv" macht? Aktuelle Commits? Mindestens ein Commit, seit es verzweigt wurde? –

+0

@PatrickQuirk Ein Zweig kann als aktiv betrachtet werden, wenn er in der HEAD-Revision vorhanden ist. – BoffinbraiN

+0

Haben Sie versucht, ein Skript/Batch zu erstellen, das alle Verzeichnisse in 'repo/branches /' auflistet und dann nach jedem von ihnen mit 'svn mergeinfo' sucht, wenn etwas zusammengeführt werden muss? – royalTS

Antwort

1

Zuerst müssen Sie listen alle Zweige in der HEAD-Revision nehmen:

svn list repo/branches/ -r HEAD 

Und dann haben Sie durch Ergebnisse Schleife und überprüfen mergeinfo. Hier ist ein Skript, das Sie als * .bat Datei speichern:

@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 
) 

Ich verwende ein : Revision Unterprogramm hier, weil ich es verlassen will, wenn ich die erste Revision zur Verfügung sehen zu fusionieren. Deshalb druckt dieses Programm keine doppelten Zweige.

+0

Ihr Befehl zeigt in der Tat alle Zweige in HEAD an. Das ist ziemlich einfach zu machen. Aber das brauche ich nicht. Ich möchte nur eine Teilmenge der Zweige sehen, die nicht in den Trunk integriert wurden. – BoffinbraiN

+0

Mein schlechtes. Ich habe meine Lösung behoben. – Przemek

+0

Schön gemacht! Ich habe dies in unserem alten SVN-Repo getestet, indem wir einen neuen Zweig (der in der Liste erscheint) erstellt und ihn dann in den Trunk einfügt (wodurch er von der Liste abfällt). Beantworten Sie so und Sie werden in kürzester Zeit viel Rep halten. :) – BoffinbraiN

Verwandte Themen