% % This file is included by 'slides.tex' and 'preview.tex' % \usepackage {uvodzovky} \usepackage {wasysym} \usepackage {platonsdg-core} % pocitadlo casu prednasky: \def\TIMING#1#2{% \newlinechar`\^^J % prinutime ho oddelovat spravy novym riadkom \message{^^JTIMING: #1 #2^^J} } \def\cvscmd#1{\texttt{\blue #1}} \def\svncmd#1{\texttt{\magenta #1}} \def\cmdbreak{$\mathtt{\backslash}$\\\strut{}~~~~} \def\file#1{\texttt{#1}} \hyphenation{ cen-trál-nom } % zavadenie bezpatkoveho pisma pre folie %\renewcommand{\rmdefault}{cmss} %\slidesmag{4} % % Macros and other stuff /* % 6 - To allow automatic changes of language dependant labels, % for instance by loading french.sty after Seminar % (suggested by Bernard Gaulle (IDRIS) - - Nov. 20, 1997) % Modification Denis Girou begin - Nov. 20, 1997 % From seminar.cls \def\slidename{Slide}% /* \def\slidelabel{\bf\slidename{} \theslide} % From slidesec.sty \def\listslidename{Zoznam fólií}% \makeatletter \def\listofslides{\section*{\listslidename% \@mkboth{\expandafter\MakeUppercase\listslidename}% {\expandafter\MakeUppercase\listslidename}}% \def\l@slide##1##2##3{% \slide@undottedcline{\slidenumberline{##3}{##2}}{}}% \let\l@subslide\l@slide \@startlos} \makeatother% */ % Modification Denis Girou end % cumulative slides: % For overlays, to force to print all preceding ones \makeatletter% /* \def\pst@initoverlay#1{% \pst@Verb{% /BeginOL {dup (all) eq exch TheOL le or {IfVisible not {Visible /IfVisible true def} if} {IfVisible {Invisible /IfVisible false def} if} ifelse} def \tx@InitOL /TheOL (#1) def}} \makeatother% */ \definecolor{LightLightGray}{gray}{0.98} \definecolor{LightGray}{gray}{0.75} \def\vimconfig#1{\texttt{vimconfig#1}} \def\shellexample#1{\codeexample{#1}{shell}} \def\vimexample#1{\codeexample{#1}{Vim}} \def\vimkey#1{\texttt{\blue#1}} %\def\Vim#1{Vim#1} \newsavebox{\linka} \savebox{\linka}{\textcolor{LightGray}{http://www.platon.sk}} \newlength{\mylength} \def\codeexample#1#2{% /* \[ \setlength{\fboxsep}{8pt} \setlength{\mylength}{0.7\linewidth} \addtolength{\mylength}{-2\fboxsep} \addtolength{\mylength}{-2\fboxrule} {\boxput(0.83,-1.0){\textcolor{LightGray}{#2}\vspace{1em}{}\strut}{% \fbox{% \parbox{\mylength}{ \setlength{\abovedisplayskip}{0pt} \setlength{\belowdisplayskip}{0pt} \texttt{\blue#1} }} }} \] } % */ \newpagestyle{Lugcon}{}{\strut\hspace{0.6cm}Slide: \thepage\hfil% \raisebox{0pt}[0pt][0pt]{\usebox{\linka}\hspace{0.5cm}\strut} } % vypis jednotiek: /* {\newlinechar`\^^J % prinutime ho oddelovat spravy novym riadkom \message{^^J^^J} \message{Nastavenie rozmerov:^^J} \message{---------------------------^^J} \message{voffset = \the\voffset^^J} \message{hoffset = \the\hoffset^^J} \message{textwidth = \the\textwidth^^J} \message{textheight = \the\textheight^^J} \message{oddsidemargin = \the\oddsidemargin^^J} \message{evensidemargin = \the\evensidemargin^^J} \message{topmargin = \the\topmargin^^J} \message{unitlength = \the\unitlength^^J} \message{parindent = \the\parindent^^J} \message{parskip = \the\parskip^^J} \message{abovecaptionskip = \the\abovecaptionskip^^J} \message{belowcaptionskip = \the\belowcaptionskip^^J} \message{---------------------------^^J^^J} }% */ % % End of macros */ % % % Ostylovanie prednasky: % - v strede velky sivucky napis "Vim" % - vpravo dole sivy napis s linkou na vimconfig \setlength{\slideframewidth}{1pt}% /* \def\bgtext{}% na prvom slide nebude logo Vim \newslideframe{Platon}{% \boxput(0,0){% \scalebox{10.0}{\textcolor{LightGray}{\expandafter\bgtext}}% }{% %\boxput(0.5,-1){% %\rput{0}{\usebox{\linka}} %}{% #1% %\usebox{\linka} %}% }% } % */ \slideframe{Platon} %\slideframe*{scplain} \slideframe*{shadow} \centerslidesfalse \begin{document} \title{Porovnanie CVS a Subversion} \pagestyle{empty} % UVOD /* \begin{slide} \begin{center} \strut{}\vfill {\huge Porovnanie CVS a Subversion\\} \strut{}\strut\\ {\large Mgr. Ľubomír Host}\\ \texttt{\footnotesize } \\ \texttt{\footnotesize http://rajo.platon.sk} \\ \strut{}\strut\\ {\large Združenie Platón}\\ {\footnotesize nezisková organizácia na podporu otvoreného softvéru} \\ \texttt{\blue http://www.platon.sk}\\ \vfill{}\strut \end{center} \end{slide} %\def\bgtext{Platon}% zapneme logo "Platon" na pozadi slajdov \pagestyle{Lugcon}% a hodime cislo slajdu + linku na vimconfig do paty stranky \begin{slide} \slideheading{Osnova prednášky} \begin{itemize} \item \overlay{0}{čo to je CVS a Subversion} \item \overlay{1}{načo to je dobré} \item \overlay{2}{výhody a nevýhody} \item \overlay{3}{ako si to spojazdniť} \item \overlay{4}{praktické použitie} \end{itemize} \end{slide} \TIMING{1}{min} \begin{slide} \slideheading{Čo to je CVS a Subversion} \begin{itemize} \item \overlay{0}{Version Control System -- systém na správu verzií, resp. SCM systems} \item \overlay{1}{umožňuje archivovať vývojové a~produkčné verzie projektov (označovanie míľnikov, tzv. releases/milestones)} \item \overlay{2}{spolupráca viacerých ľudí na spoločnom projekte} \item \overlay{3}{predstaviť si to možno ako \textbf{centrálne úložisko pre vaše projekty}} \item \overlay{4}{zjednodušenie procesu zálohovania} \end{itemize} \end{slide} \TIMING{3}{min} \begin{slide} \slideheading{Rozdielny štýl práce} \begin{itemize} \item \overlay{0}{konečne je definované, ktorá verzia je aktuálna: \textbf{tá v centrálnom úložisku (Repository)}} \item \overlay{1}{je v podstate jedno, ktorý systém používate; doležité je, aby vám uľahčoval prácu} \end{itemize} \end{slide} \TIMING{2}{min} \begin{slide} \slideheading{Starý štýl práce} \begin{enumerate} \item \overlay{0}{idem pracovať na projekte} \item \overlay{1}{vezmem nejakú verziu, začnem upravovať} \item \overlay{2}{otestujem svoje zmeny} \item \overlay{3}{spomeniem si, kde som spravil zmeny} \item \overlay{4}{spravím zálohu ostrej verzie} \item \overlay{5}{nové verzie súborov nakopírujem do ostrej verzie} \item \overlay{6}{skontrolujem, či moje zmeny v ostrej verzii fungujú} \item \overlay{7}{pomýlil som sa a moja práca je preč!} \end{enumerate} \end{slide} \TIMING{4}{min} \begin{slide} \slideheading{Problémy} \begin{itemize} \item \overlay{0}{začleňovanie mojich zmien do ostrej verzie} \item \overlay{1}{nekonzistentný stav ostrej verzie počas začleňovania zmien} \item \overlay{2}{ťažkopádna spolupráca viacerých ľudí na jednom projekte} \item \overlay{3}{problematické zlučovanie zmien z rôznych verzií} \item \overlay{4}{problém so skladovaním rôznych verzií} \item \overlay{5}{zložité zálohovanie} \end{itemize} \end{slide} \TIMING{3}{min} % end UVOD */ \begin{slide} %\slideheading{} {}\strut\vfill \hfill\textbf{\Huge Dosť bolo BORDELU!!!}\hfill\strut{} \vfill \end{slide} \TIMING{0}{min} % novy styl prace/* \begin{slide} \slideheading{Nový štýl práce} \begin{itemize} \item \overlay{0}{začneme založením úložiska pre naše projekty} \item \overlay{1}{pridáme projekt do CVS / SVN} \item \overlay{2}{upravíme projekt} \item \overlay{3}{zaznamenáme zmenu} \item \overlay{4}{zaktualizujeme ostrú verziu} \item \overlay{5}{pozrieme si staršie verzie projektov} \item \overlay{6}{ukážeme si spoluprácu viacerých vývojárov} \end{itemize} \end{slide} \TIMING{1}{min} % */ % zalozenie uloziska /* \begin{slide} \slideheading{Založenie úložiska} \begin{itemize} \item \overlay{0}{\cvscmd{cvs -d \~{}/cvs\_root init}} \item \overlay{1}{\svncmd{svnadmin create --fs-type fsfs \~{}/svn\_root}} \item \overlay{2}{\svncmd{svnadmin create --fs-type bdb \~{}/svn\_root}} % \item \overlay{2}{ %\begin{verbatim} %/home/lugcon/svn_root/ %|-- db %| |-- DB_CONFIG %| |-- __db.001 %... %| |-- __db.005 %| |-- fs-type %| |-- log.0000000001 %... %\end{verbatim} %} \end{itemize} \end{slide} \TIMING{2}{min} % */ % struktura uloziska /* \begin{slide} \slideheading{Štruktúra úložiska} \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{jeden súbor v úložisku = jeden súbor v projekte} \item \overlay{2}{v úložisku sa možno jednoducho prehrabávať} \item \overlay{3}{konfigurácia CVS je v projekte CVSROOT -- problémy so zabezpečením servera} \end{itemize} \overlay{4}{\textbf{SVN}} \begin{itemize} \item \overlay{5}{dva súbory v úložisku = jedna revízia projektu} \item \overlay{6}{na prehrabávanie sa v SVN úložisku máme príkaz \\ \svncmd{svnlook tree \~{}/svn\_root }} \end{itemize} \end{slide} \TIMING{3}{min} % */ % navr struktury projektov - CVS /* \begin{slide} \slideheading{Návrh štruktúry projektov pre CVS} \overlay{0}{\textbf{Príprava projektu a~pridanie do CVS:}} \\ \begin{enumerate} \item \overlay{1}{\cvscmd{export CVSROOT=:local:/home/lugcon/cvs\_root}} \item \overlay{2}{\cvscmd{cd \~{}/work/c-project}} \item \overlay{3}{\cvscmd{cvs import -m 'Import projektu do CVS' \cmdbreak{}c-project rajo start}} \item \overlay{4}{\cvscmd{cd ..}} \item \overlay{5}{\cvscmd{mv c-project c-project.bak}} \item \overlay{6}{\cvscmd{cvs checkout c-project}} \end{enumerate} \end{slide} \TIMING{2}{min} % */ % navr struktury projektov - SVN /* \begin{slide} \slideheading{Návrh štruktúry projektov pre SVN} \overlay{0}{\textbf{Príprava projektu a~pridanie do SVN:}} \\ \begin{enumerate} \item \overlay{1}{\magenta \begin{verbatim} s-project |-- branches |-- tags \-- trunk |-- Makefile |-- README \-- src |-- Makefile \-- test.c \end{verbatim} } \newpage \item \overlay{2}{\svncmd{cd \~{}/work/}} \item \overlay{3}{\svncmd{svn import -m 'Import projektu do SVN' s-project \cmdbreak{}file:///home/lugcon/svn\_root/s-project}} \item \overlay{4}{\svncmd{mv s-project s-project.bak}} \item \overlay{5}{\svncmd{svn checkout \cmdbreak{}file:///home/lugcon/svn\_root/s-project/trunk \cmdbreak{}s-project} } \end{enumerate} \end{slide} \TIMING{3}{min} % */ % sprava verzii /* \begin{slide} \slideheading{Správa verzií} \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{každý súbor má číslovanie revízií zvlášť} \item \overlay{2}{príslušnosť nejakej verzie súboru do určitej revízie/míľnika je zapísaná v~RCS súbore \texttt{subor.txt,v}} \end{itemize} \begin{center} \includegraphics[height=\textheight]{img/t} \end{center} \overlay{3}{\textbf{SVN}} \begin{itemize} \item \overlay{4}{spoločné číslovanie revízií pre všetky projekty} \item \overlay{5}{podpora transakcií} \item \overlay{6}{míľniky sú nezávislé stromy v~adresárovej štruktúre} \end{itemize} \begin{center} \includegraphics[]{img/ch08dia1} \end{center} \begin{center} \includegraphics[]{img/ch08dia2} \end{center} \end{slide} \TIMING{2}{min} % */ % atributy suborov /* \begin{slide} \slideheading{Atribúty súborov} \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{ignorovanie súborov zapísaných v~\file{.cvsignore}} \item \overlay{2}{označenie súboru ako binárneho príkazom \\ \cvscmd{cvs admin -kb image.jpeg}} \end{itemize} \overlay{3}{\textbf{SVN}} \begin{itemize} \item \overlay{4}{implementované rozhranie na nastavovanie atribútov súborov} \item \overlay{5}{\svncmd{svn propset svn:ignore '*.o *.bak' path/to/directory}} \item \overlay{6}{\svncmd{svn propset copyright '(c) 2005 Platon Group' main.c}} \item \overlay{7}{ďalšie možné atribúty: \svncmd{license svn:executable svn:mime-type svn:keywords svn:svn:eol-style} } \end{itemize} \end{slide} \TIMING{2}{min} % */ % prehliadanie zmien /* \begin{slide} \slideheading{Prehliadanie zmien a~stav súborov} \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{\cvscmd{cvs diff subor.txt}} \item \overlay{2}{\cvscmd{cvs status subor.txt}} \end{itemize} \overlay{3}{\textbf{SVN}} \begin{itemize} \item \overlay{5}{\svncmd{svn diff subor.txt}} \item \overlay{6}{\svncmd{svn status subor.txt}} \end{itemize} \end{slide} \TIMING{1}{min} % */ % symbolicke odkazy, spc. subory /* \begin{slide} \slideheading{Symbolické odkazy a špeciálne súbory} \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{bez podpory vkladania symbolických odkazov} \end{itemize} \overlay{2}{\textbf{SVN}} \begin{itemize} \item \overlay{3}{symbolické odkazy SVN zvláda bez problémov} \end{itemize} \end{slide} \TIMING{1}{min} % */ % odstranenie suboru z projektu /* \begin{slide} \slideheading{Odstránenie súboru z projektu} \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{ \cvscmd{rm -f test.txt} \\ \cvscmd{cvs remove test.txt} \\ \cvscmd{cvs commit -m 'Subor odstraneny' test.txt} } \end{itemize} \overlay{2}{\textbf{SVN}} \begin{itemize} \item \overlay{3}{ \svncmd{svn remove test.txt} \\ \svncmd{svn commit -m 'Subor odstraneny' test.txt} } \end{itemize} \end{slide} \TIMING{1}{min} % */ % riesenie konfliktov /* \begin{slide} \slideheading{Riešenie konfliktov} S bežným zlučovaním zmien na rôznych miestach súboru si CVS aj~SVN hravo poradí. Problém nastane, ak dvaja vývojári spravia rozdielne zmeny v tej istej časti kódu a~ich zmeny sú navzájom nekompatibilné. \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{ \cvscmd{cvs update} \\ \cvscmd{vim test.c} \\ \cvscmd{cvs diff} \\ \cvscmd{cvs commit -m 'Rucne zlucenie zmien.' test.c} \\ } \end{itemize} \newpage \overlay{2}{\textbf{SVN}} \begin{itemize} \item \overlay{3}{ \svncmd{svn update} \\ \svncmd{vim test.c} \\ \svncmd{svn resolved test.c} \\ \svncmd{svn commit -m 'Rucne zlucenie zmien.' test.c} } \end{itemize} \end{slide} \TIMING{3}{min} % */ % zrusenie zmien /* \begin{slide} \slideheading{Zrušenie zmien} \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{ \cvscmd{rm -f test.txt} \\ \cvscmd{cvs update test.txt} } \end{itemize} \overlay{2}{\textbf{SVN}} \begin{itemize} \item \overlay{3}{ \svncmd{svn revert test.txt} } \end{itemize} \end{slide} \TIMING{2}{min} % */ % vetvy vyvoja, zlucovanie zmien /* \begin{slide} \slideheading{Vetvy vývoja, zlučovanie zmien} \textbf{CVS} \begin{itemize} \item pre každý súbor existuje samostatný strom revízií \end{itemize} \textbf{SVN} \begin{itemize} \item jedna revízia je stromová štruktúra adresárov a~súborov \item táto štruktúra sa v čase mení, čiže čas pridáva dvojdimenzionálnej štruktúre tretí rozmer \end{itemize} \end{slide} \TIMING{1}{min} % */ % zalozenie novej vetvy vyvoja /* \begin{slide} \textbf{CVS} \begin{itemize} \item vytvorenie novej vývojovej vetvy: \\ \cvscmd{cvs tag -b rel-1-0-patches} \item prístup k novej vetve: \\ \cvscmd{cvs checkout -r rel-1-0-patches c-project} \item prepnutie do novej vetvy: \\ \cvscmd{cvs update -r rel-1-0-patches} \item začlenenie zmien z~vetvy rel-1-0-patches: \ \cvscmd{cvs update -j rel-1-0-patches} \\ \cvscmd{cvs commit -m 'Zahrnute opravy z verzie 1.0'} \end{itemize} \newpage \textbf{SVN} \begin{itemize} \item vytvorenie novej vývojovej vetvy: \\ \svncmd{svn checkout \cmdbreak{}file:///home/lugcon/svn\_root/s-project \cmdbreak{}s-project} \\ \svncmd{cd s-project} \\ \svncmd{svn copy trunk branches/rel-1-0-patches} \item prístup k novej vetve: \\ \svncmd{svn checkout \cmdbreak{}file:///home/lugcon/svn\_root/s-project/bran-\\ches/rel-1-0-patches} \newpage \item začlenenie zmien z hlavnej vetvy: \\ \svncmd{svn merge -r 343:344 \cmdbreak{}file:///home/lugcon/svn\_root/s-project/trunk} \\ \svncmd{svn commit \cmdbreak{}-m "Zaclenienie zmien r344 z hlavnej vetvy trunk."} \end{itemize} \end{slide} \TIMING{10}{min} % */ % ine metody pristupu k ulozisku /* \begin{slide} \slideheading{Iné metódy prístupu k úložisku} \overlay{0}{\textbf{CVS}} \begin{itemize} \item \overlay{1}{bez modulárnej štruktúry, bez API} \item \overlay{1}{spúšťanie cez inetd} \item \overlay{1}{tunelovanie cez ssh} \item \overlay{1}{lokálne} \end{itemize} \overlay{3}{\textbf{SVN}} \begin{itemize} \item \overlay{4}{dobre navrhnuté API, rôzny backend (bdb, fsfs)} \item \overlay{5}{spúšťanie cez inetd} \item \overlay{6}{tunelovanie cez ssh} \item \overlay{7}{lokálne} \item \overlay{8}{WebDAV, spúštanie cez Apache 2.x} \end{itemize} \end{slide} \TIMING{1}{min} % */ % zalohovanie uloziska, synchronizacia /* \begin{slide} \slideheading{Zálohovanie úložiska, synchronizácia} \begin{itemize} \item \overlay{0}{CVS zálohovať ako ostatné súbory na disku} \item \overlay{1}{SVN zálohovať utilitou \svncmd{svnadmin}: \\ \svncmd{svnadmin dump file:///home/lugcon/svn\_root} } \end{itemize} \textbf{Synchronizácia} \\ \svncmd{rsync -a -e ssh --delete --progress --stats \cmdbreak{}/home/rajo/svn\_root/ \cmdbreak{}rajo@platon.sk:/home/rajo/svn\_root/} \textcolor{red}{Pozor na koncové lomítka a poradie parametrov!} \\ Najlepšie je spraviť skript, ktorý synchronizáciu spraví za Vás. \end{slide} \TIMING{2}{min} % */ % Dalsie nastroje /* \begin{slide} \slideheading{Domovské stránky projektov} \textbf{CVS:} \begin{itemize} \item \URL{http://ximbiot.com/cvs/cvshome/} \end{itemize} \textbf{SVN:} \begin{itemize} \item \URL{http://subversion.tigris.org/} \item dokumentácia \URL{http://svnbook.red-bean.com/} \end{itemize} \end{slide} \TIMING{2}{min} % */ % Dalsie nastroje /* \begin{slide} \slideheading{Ďalšie nástroje na správu verzií} \textbf{Slobodné alternatívy:} \begin{itemize} \item git \URL{http://git.or.cz/} \item SVK \URL{http://svk.elixus.org/} \item GNU arch \URL{http://www.gnu.org/software/gnu-arch/} \item darcs \URL{http://abridgegame.org/darcs/} \end{itemize} \textbf{Komerčné alternatívy:} \begin{itemize} \item BitKeeper \URL{http://www.bitkeeper.com/} \item Rational ClearCase \URL{http://www-306.ibm.com/software/awdtools/clearcase/} %\item Microsoft SourceSafe \URL{http://msdn.microsoft.com/vstudio/previous/ssafe/} \end{itemize} Ďalšie porovnania na \URL{http://www.bitkeeper.com/Comparisons.html} \textbf{Konvertory:} \begin{itemize} \item cvs2svn \URL{http://cvs2svn.tigris.org/} -- funguje bez problémov \end{itemize} \end{slide} \TIMING{2}{min} % */ % ZAVER /* \def\bgtext{}% vypneme logo "Vim" \begin{slide} \slideheading{Záver} \begin{center} \strut{}\vfill {\large\bf Ďakujem za pozornosť}\\ \strut{}\strut\\ {\large Mgr. Ľubomír Host}\\ \texttt{\footnotesize }\\ \texttt{\footnotesize http://rajo.platon.sk} \\ \strut{}\strut\\ {\large Združenie Platón}\\ {\footnotesize združenie na podporu otvoreného softvéru} \\ \texttt{\blue http://www.platon.sk}\\ \vfill{}\strut\\ \tiny{Powered by: \\ Vim, \LaTeX, GNU/Linux Debian, \vimconfig{} \\ PLaTos -- \URL{\blue http://platos.platon.sk/} }\\ {}\strut\\ \end{center} \end{slide} \TIMING{1}{min} %\begin{slide} % \listofslides %\end{slide} % end ZAVER */ \end{document} % vim: ts=4 % vim600: fdl=0 fdm=marker fdc=3 fmr=/*,*/ tw=120