Ein Tool zur Veranschaulichung von SVN-Repo-Bäumen?

Mein Team verwendet fünf separate SVN-Repositories für fünf verschiedene Module oder Apps, die wir pflegen. Jede hat ihre eigene Versionsfolge.

Wir haben gerne ein „Wandposter“ über den aktuellen Stand unserer Repos mit ihren Filialen. Derzeit verwenden wir dafür ein Whiteboard, und es funktioniert gut genug. Aber ich frage mich, ob es ein Tool gibt , das uns dabei helfen kann? Ich wäre damit einverstanden, ein Dokument (Visio oder was auch immer) manuell aktualisieren zu müssen, aber Bonuspunkte für ein Tool, das natürlich automatisch von unserem SVN-Server abrufen kann.

Unser Whiteboard sieht ungefähr so ​​aus: Wir haben eine Hauptentwicklungslinie im Kofferraum ===. Wenn ein Release abgeschlossen ist, markieren wir es ound erstellen einen Wartungszweig ---, damit wir Bugfix-Release-Tags bereitstellen können, owährend die Trunk-Entwicklung fortgesetzt wird.

Foo trunk:   o===dev1.0===o====dev1.1===========o====dev1.2==========
Foo 1.0.x maintenance:    |---fix1.0.1--o---    |
Foo 1.1.x maintenance:                          |--fix1.1.1--o---

Bar trunk:   o===dev1.0===o====dev1.1===========o====dev1.2==========
Bar 1.0.x maintenance:    |---fix1.0.1--o---    |
Bar 1.1.x maintenance:                          |--fix1.1.1--o---

Xyz trunk:   o===dev1.0===o====dev1.1===========o====dev1.2==========
Xyz 1.0.x maintenance:    |---fix1.0.1--o---    |
Xyz 1.1.x maintenance:                          |--fix1.1.1--o---

...

Gibt es ein Tool, das helfen könnte, ein "Poster" zu pflegen, das ähnlich aussieht? Beachten Sie, dass ich dies für mehrere Repos auf einem Server machen möchte, nicht nur für ein einzelnes Repo, und dass ich mich nur um die Tags und nicht um die einzelnen Checkins kümmere.

Ich bin mir nicht sicher, ob es genau passt, aber Trac hat einige Addons dafür, die Graphviz verwenden, um Repos automatisch zu visualisieren. Ich bin mir nicht sicher, ob das so konfiguriert werden könnte, dass es genau die Bäume erstellt, nach denen Sie suchen, aber es ist auf jeden Fall einen Blick wert. Siehe zB sein Revtree-Plugin (Seite hat Screenshots).
Keine Antwort, da Sie bereits SVN verwenden und vermutlich dabei geblieben sind, aber das ist der Grund, warum ich unsere kleine Firma von SVN auf Plastic SCM umgestellt habe. "Der Branch Explorer wurde nach dem typischen Tafeldiagramm erstellt, das jedes Team zeichnet, wenn es versucht, die Zusammenführungsstruktur des Projekts zu erklären" - plasticscm.com/branch-explorer/index.html Vielleicht hilft dies anderen, die diese Frage finden und sind entweder in der Lage zu wechseln oder oder auf der Suche nach einem neuen VCS ... plasticscm.com/branch-explorer/assets/img/…

Antworten (2)

TikZ

TikZ ist ein (La)TeX-Paket zum Zeichnen aller Arten von Diagrammen. Ich benutze es für die meisten meiner Zeichenbedürfnisse. Zu seinen Merkmalen gehören:

  • Intuitive Sprachsyntax
  • Vektorgrafiken (damit Sie Ihr Poster auf jede beliebige Größe skalieren können),
  • Eine riesige Auswahl an Bibliotheken,
  • Möglichkeit, benutzerdefinierte Befehle und Stile zu definieren
  • Eine ausführliche Bedienungsanleitung ,
  • Hervorragender Community-Support auf TeX.SE (beliebtestes Frage-Tag dort drüben mit fast 9000 Fragen).

Hier ist ein Beispiel für den ersten Teil Ihres Diagramms, wie er mit TikZ gezeichnet wurde:


Quellcode für obiges Diagramm:

\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{shapes,positioning,arrows}
\tikzstyle{revision}=[draw,circle,inner sep=2pt]
\tikzstyle{trunkline}=[draw,ultra thick,postaction={draw,thick,color=white}]

\begin{document}
\begin{tikzpicture}[node distance=1cm and 2cm]
  \node[minimum width=4cm] (footrunk) {Foo trunk:};
  \node[revision,right= of footrunk,right=5mm,fill=gray!60] (rev12345) {};
  \node[revision,right= of rev12345] (rev12346) {};
  \node[revision,right= of rev12346,right=3cm] (rev12347) {};
  \node[revision,right= of rev12347] (rev12348) {};

  \node[minimum width=4cm,below= of footrunk,above] (maintenance1) {Foo 1.0.x maintenance};
  \node[revision,below=of rev12346,above] (fix10) {};
  \node[revision,right=of fix10] (fix101) {};
  \node[minimum width=4cm,below= of maintenance1,above] (maintenance2) {Foo 1.1.x maintenance};
  \node[revision,node distance=2cm,below=of rev12347,above] (fix11) {};
  \node[revision,right=of fix11] (fix111) {};

  \draw[trunkline] (rev12345) -- node[font=\scriptsize,fill=white]{dev1.0} (rev12346);
  \draw[trunkline] (rev12346) -- node[font=\scriptsize,fill=white]{dev1.1} (rev12347);
  \draw[trunkline] (rev12347) -- node[font=\scriptsize,fill=white]{dev1.2} (rev12348);
  \draw[very thick,dotted,-stealth'] (rev12348) -- ++(1cm,0);
  \draw (rev12346) -- (fix10);
  \draw (fix10) -- node[font=\scriptsize,fill=white]{fix1.0.1} (fix101);
  \draw[thick,blue,dashed,-stealth'] (fix101) -- (rev12347);
  \draw (rev12347) -- (fix11);
  \draw (fix11) -- node[font=\scriptsize,fill=white]{fix1.1.1} (fix111);
\end{tikzpicture}
\end{document}

Bearbeiten Sie die Automatisierung

Um diese Diagramme zu automatisieren, müssen Sie die Makros im TikZ-Paket verwenden. Da die Durchführung mathematischer Operationen in TikZ immer noch mühsam ist, ist es noch besser, wenn Sie eine andere leistungsfähige Sprache verwenden könnten, um die texDatei zu bearbeiten, wie Perl oder Python. Diese können auch verwendet werden, um Daten aus Ihren SVN-Protokolldateien zu extrahieren, wodurch ein vollständig automatisierter Prozess erreicht wird.

Hier ist ein Versuch, das obige Diagramm mit TikZ allein mit 3 Eingabevariablen zu automatisieren: Erste und letzte Umdrehung und Anzahl der Zweige. Dies funktioniert natürlich nur für diese spezielle Form von Bäumen, aber es dient als Beispiel dafür, wie Makros funktionieren.

Hauptskript

\documentclass[tikz,border=2pt]{standalone}
\usetikzlibrary{shapes,positioning,arrows}

% Macros
\input{svn_macros}
% Configuration
\newcommand\FirstRevNumber{12345}
\newcommand\CurrentRevNumber{12348}
\newcommand\FixCount{2}
% End of configuration

\begin{document}
\begin{tikzpicture}[node distance=1cm and 1.5cm]
  \node[minimum width=4cm] (0) {Foo trunk:};
  \firstrevision{\FirstRevNumber}{0}
  \foreach \rev [count=\counter from 0]  in {\FirstRevNumber,...,\CurrentRevNumber}{
    \pgfmathtruncatemacro{\NextRev}{\rev+1}
    \pgfmathtruncatemacro{\FixNum}{\counter+1}
    \revision{\NextRev}{\rev}\mainline{\rev}{\NextRev}{dev1.\counter}
    \ifnum\counter<\FixCount
      \node[minimum width=4cm,below= of \counter,above] (\FixNum) {Foo 1.\counter.x maintenance};
      \newfix[\FixNum]{1\counter}{\NextRev}
      \fix{1\counter1}{1\counter}
      \branchline{1\counter}{1\counter1}{fix1.\counter.1}
    \fi
  }
  \foreach \rev [count=\counter from 0]  in {\FirstRevNumber,...,\CurrentRevNumber}{
    \pgfmathtruncatemacro{\SecondNextRev}{\rev+2}
    \ifnum\counter<\FixCount
      \draw[thick,blue,dashed,-stealth'] (1\counter1) -- (\SecondNextRev);
    \fi
  }
\end{tikzpicture}
\end{document}

importierte Datei

\newcommand\firstrevision[2]{\node[draw,circle,inner sep=2pt,right= of #2,right=5mm,fill=gray!60](#1){};}
\newcommand\revision[2]{\node[draw,circle,inner sep=2pt,right= of #2,right=2cm](#1){};}
\newcommand\newfix[3][1]{\node[draw,circle,node distance=#1cm,inner sep=2pt,below= of #3,above](#2){};\draw (#3) -- (#2);}
\newcommand\fix[2]{\node[draw,circle,inner sep=2pt,right= of #2](#1){};}
\newcommand\mainline[3]{\draw[ultra thick,postaction={draw,thick,color=white}] (#1) -- node[font=\scriptsize,fill=white]{#3} (#2);}
\newcommand\branchline[3]{\draw (#1) -- node[font=\scriptsize,fill=white]{#3} (#2);}

Dies würde einen ähnlichen Baum wie die obige Abbildung erzeugen, aber wenn Sie die Zahlen im Konfigurationsabschnitt erhöhen (z. B. 12345, 12360 und 8), könnten Sie am Ende einen ziemlich langen Baum erhalten:

Ergebnis

(Bild anklicken für größere Version)

Vielen Dank, die Neuerstellung meines Diagramms zeigt sicherlich, wie gut Ihr Vorschlag funktioniert. Es scheint sehr strukturiert zu sein – wenn es jetzt eine Möglichkeit gäbe, dies automatisch zu generieren, wäre es perfekt.
@TorbenGundtofte-Bruun Ich würde sagen, es ist durchaus möglich, aber definitiv nichts, was man in einer längeren Kaffeepause zaubern könnte. Mit genügend Zeit könnte man eine Reihe von Makros in TeX definieren, um ein Muster der Diagramme zu bilden, und dann ein Skript in einer mächtigen Programmiersprache wie Perl oder Python schreiben. Es würde die Daten aus Ihrer SVN-Protokolldatei lesen und das entsprechende Bild generieren. Vielleicht könnten Sie eine Beispielprotokolldatei posten, die dem geposteten Diagramm entspricht, und ich werde versuchen, ein Beispielskript zu posten, um das zu lesen
Ja, eine Art SVN-Dateianalyse ist erforderlich. Ich gebe Ihnen keine Protokolldatei - nicht aus Geheimhaltungsgründen, sondern weil ich lieber keine Zeit damit verbringen möchte, ein Skript auszuarbeiten, das ich wahrscheinlich bei der Arbeit in Betrieb nehmen könnte.
@TorbenGundtofte-Bruun Ich habe die Antwort mit einem anderen Beispiel bearbeitet, das Makros enthält. Ich hoffe, es hilft
Entschuldigung, da war ein Wort aus meinem letzten Kommentar! Ich meinte: Weil ich lieber nicht möchte, dass Sie Zeit damit verbringen, ein Drehbuch auszuarbeiten, das ich bei der Arbeit wahrscheinlich nicht in Betrieb nehmen könnte.
@TorbenGundtofte-Bruun Nicht schaden :). Es ist eine großartige Frage, und es gibt wahrscheinlich bessere und einfachere Tools da draußen

Da Sie dies wahrscheinlich mehrmals pro Woche tun möchten/müssen und SVN-Log-Operationen oft zeitaufwändig sind, würde ich vorschlagen, dass Sie lokale Quecksilber - Repositories der SVN-Repositories haben (mithilfe von hgsubversion ), um die Dinge zu beschleunigen.

Mercurial hat auch einige sehr ausgeklügelte Protokollausgabefunktionen (siehe hg help logund hg help templatesfür weitere Details), die Sie wahrscheinlich verwenden könnten, um Ausgaben zu erzeugen, die leicht in so etwas wie graphviz einmassiert werden können , um Ihr Diagramm zu geben.