2017-08-03 98 views
7

Moje pytanie jest podobne do Mercurial: List all unmerged branches, ale dla SVN, a nie Mercurial.Subversion: Jak uzyskać listę wszystkich aktywnych, niezmontowanych gałęzi

Potrzebuję znaleźć sposób na listę wszystkich obecnie otwartych oddziałów, które nie zostały scalone z kopalnią (zwykle trunk).

O ile jestem świadomy, odpowiednik cechą Git jest git branch --no-merged i git branch --merged

Dla wyjaśnienia, nie jestem prosząc o listę niescalonych wersjami, podobnie jak wiele innych pytań StackOverflow mieć zapytał w przeszłości.

Przyjmuję każde rozwiązanie, które będzie w stanie wyświetlić listę wszystkich oddziałów aktywnych, które nie zostały jeszcze scalone. Jeśli nie jest to możliwe, przyjmuję odpowiedź, która zawiera listę wszystkich aktywnych gałęzi połączonych, co pozwala mi pracować wstecz.

Na przykład, jeśli jestem na repo/trunk i repo ma następujące oddziały:

  • repo/branches/b1 nie zostały połączone w bagażniku
  • repo/branches/b2 została połączyła
  • repo/branches/b3 została usunięta w poprzedniej wersja i nie została scalona
  • repo/branches/b4 został usunięty po połączeniu

Twoje rozwiązanie powinno wrócić albo b1 albo b2, ale nigdy nie może powrócić b3 ani b4.

+0

Czy możesz zdefiniować, co czyni gałąź "aktywną" w twoim scenariuszu? Ostatnie zatwierdzenia? Co najmniej jedno zatwierdzenie, ponieważ zostało rozgałęzione? –

+0

@PatrickQuirk Oddział można uznać za aktywny, jeśli jest obecny w wersji HEAD. – BoffinbraiN

+0

Czy próbowałeś utworzyć skrypt/partię, która zawiera listę wszystkich katalogów w 'repo/branches /', a następnie sprawdzić dla każdego z nich 'svn mergeinfo', czy jest coś, co należy scalić? – royalTS

Odpowiedz

1

Po pierwsze, trzeba notować podjąć wszystkie oddziały w wersji HEAD:

svn list repo/branches/ -r HEAD 

A potem, trzeba pętli wyniki i sprawdzić mergeinfo. Oto skrypt, który można zapisać jako plik * .bat:

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

Używam : rewizja podprogram tutaj, bo chcę go opuścić, gdy widzę pierwsza wersja dostępna do scalenia. Dlatego ten program nie wydrukuje duplikatów oddziałów.

+0

Twoje polecenie rzeczywiście wyświetli wszystkie gałęzie w HEAD. To całkiem proste. Jednak to nie jest to, czego potrzebuję. Chcę tylko zobaczyć podzestaw tych gałęzi, które nie zostały połączone w trunk. – BoffinbraiN

+0

Moja zła. Naprawiłem moje rozwiązanie. – Przemek

+0

Ładnie zrobione! Przetestowałem to na naszym starym repozytorium SVN, tworząc nowy oddział (który pojawia się na liście), a następnie scalając go w trunk (powodując, że spadnie z listy). Odpowiadaj tak, a będziesz miał mnóstwo przedstawicieli w krótkim czasie. :) – BoffinbraiN