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 o
und erstellen einen Wartungszweig ---
, damit wir Bugfix-Release-Tags bereitstellen können, o
wä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.
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:
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}
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 tex
Datei 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)
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 log
und hg help templates
fü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.
Izzy
Mawg sagt, Monica wieder einzusetzen