Subversion: Unterschied zwischen den Versionen

Aus Das Sopra Wiki
Dietsch (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Dietsch (Diskussion | Beiträge)
Keine Bearbeitungszusammenfassung
Zeile 14: Zeile 14:
Grundsätzlich besteht eine [[Versionsverwaltung]] mit [[Subversion]] aus  
Grundsätzlich besteht eine [[Versionsverwaltung]] mit [[Subversion]] aus  
* einem [[#Repository|Repository]] auf einem zentralen Server, das alle [[#Revision|Revisionen]] des Projekts enthält und  
* einem [[#Repository|Repository]] auf einem zentralen Server, das alle [[#Revision|Revisionen]] des Projekts enthält und  
* vielen [[#Working Copy|Working Copies]] auf den Computern der Entwickler, die jeweils nur eine [[#Revision|Revision]] des Projekts zusammen mit den lokalen Änderungen des Entwicklers darstellen.
* vielen [[#Working Copy|Working Copies]] auf den Computern der Entwickler, die jeweils nur eine [[#Revision|Revision]] des Projekts zusammen mit den [[#Working Copy bearbeiten|lokalen Änderungen]] des Entwicklers darstellen.


== zentrale Begriffe ==
== zentrale Begriffe ==
Zeile 23: Zeile 23:
Jeder [[Subversion#Working Copy commiten|Commit]] eines Benutzers führt zu so einer Änderung am [[#Repository|Repository]] und erhöht die Revision um 1.
Jeder [[Subversion#Working Copy commiten|Commit]] eines Benutzers führt zu so einer Änderung am [[#Repository|Repository]] und erhöht die Revision um 1.
<br clear="all">
<br clear="all">
=== Repository ===
=== Repository ===
Das ''Repository'' ist der zentrale Verzeichnisbaum, in dem sich alle unter [[Versionsverwaltung]] stehenden Dateien befinden. Das Repository kann alle Änderungen, die jemals an diesen Dateien oder Verzeichnissen vorgenommen wurden
Das ''Repository'' ist der zentrale Verzeichnisbaum, in dem sich alle unter [[Versionsverwaltung]] stehenden Dateien befinden. Das Repository kann alle Änderungen, die jemals an diesen Dateien oder Verzeichnissen vorgenommen wurden
Zeile 29: Zeile 30:


=== Working Copy ===
=== Working Copy ===
Die ''Working Copy'' (Arbeitskopie) ist ein Verzeichnis, das auf dem Rechner des Benutzers liegt und durch einen [[#Projekt auschecken|Checkout]] des [[#Repository|Repositorys]] angelegt wurde. Es enthält eine [[#Revision|Revision]] des [[#Repository|Repositorys]] zusammen mit den Änderungen, die der Benutzer daran vorgenommen hat. Diese Änderungen können durch einen [[#Working Copy commiten|Commit]] mit dem zentralen [[#Repository|Repository]] synchronisiert werden.  
Die ''Working Copy'' (Arbeitskopie) ist ein Verzeichnis, das auf dem Rechner des Benutzers liegt und durch einen [[#Projekt auschecken|Checkout]] des [[#Repository|Repositorys]] angelegt wurde. Es enthält eine [[#Revision|Revision]] des [[#Repository|Repositorys]] zusammen mit den [[#Working Copy bearbeiten|lokalen Änderungen]], die der Benutzer daran vorgenommen hat. Diese Änderungen können durch einen [[#Working Copy commiten|Commit]] mit dem zentralen [[#Repository|Repository]] synchronisiert werden.  


Die Working Copy kann durch ein [[#Working Copy updaten|Update]] auf den neuesten Stand (d.h. die neueste [[#Revision|Revision]]) gebracht werden. Dabei können [[#Conflicts|Konflikte]] entstehen.
Die Working Copy kann durch ein [[#Working Copy updaten|Update]] auf den neuesten Stand (d.h. die neueste [[#Revision|Revision]]) gebracht werden. Dabei können [[#Conflicts|Konflikte]] entstehen.


Die Working Copy kann auch lokale Änderungen seit der letzen Synchronisation mit [[#Revert|Revert]] rückgängig machen. Das funktioniert nicht nur für die gesamte Working Copy, sondern auch für jede einzelne Datei in ihr.  
Die Working Copy kann auch [[#Working Copy bearbeiten|lokale Änderungen]] seit der letzen Synchronisation mit [[#Revert|Revert]] rückgängig machen. Das funktioniert nicht nur für die gesamte Working Copy, sondern auch für jede einzelne Datei in ihr.  


Mit [[#Projekt auschecken|Checkout]] und [[#Working Copy updaten|Update]] kann die Working Copy auch gezielt auf den Stand einer speziellen [[#Revision|Revision]] gebracht werden.  
Mit [[#Projekt auschecken|Checkout]] und [[#Working Copy updaten|Update]] kann die Working Copy auch gezielt auf den Stand einer speziellen [[#Revision|Revision]] gebracht werden.  
Zeile 39: Zeile 40:
== Arbeiten mit Subversion ==  
== Arbeiten mit Subversion ==  
Wir beschreiben hier kurz und sehr abstrakt die einzelnen Funktionen, die ein [[Subversion]]-Client generell zur Verfügung stellt. Die genaue Funktionsweise kann von Client zu Client abweichen.  
Wir beschreiben hier kurz und sehr abstrakt die einzelnen Funktionen, die ein [[Subversion]]-Client generell zur Verfügung stellt. Die genaue Funktionsweise kann von Client zu Client abweichen.  
=== Projekt importieren ===
=== Projekt importieren ===
Mit ''Projekt importieren'' fügt man ein schon existierendes, nicht unter [[Versionsverwaltung]] stehendes, meist lokales, Verzeichnis zum [[#Repository|Repository]] hinzu.  
Mit ''Projekt importieren'' fügt man ein schon existierendes, nicht unter [[Versionsverwaltung]] stehendes, meist lokales, Verzeichnis zum [[#Repository|Repository]] hinzu.  


'''Achtung:''' Das lokale, hinzugefügte Verzeichnis wird dadurch NICHT zur [[#Working Copy|Working Copy]]. Will man mit diesem Verzeichnis weiter arbeiten, muss man das [[#Repository|Repository]] [[#Projekt auschecken|auschecken]].  
'''Achtung:''' Das lokale, hinzugefügte Verzeichnis wird dadurch NICHT zur [[#Working Copy|Working Copy]]. Will man mit diesem Verzeichnis weiter arbeiten, muss man das [[#Repository|Repository]] [[#Projekt auschecken|auschecken]].  
=== Projekt auschecken ===
=== Projekt auschecken ===
Mit ''Projekt auschecken'' (<tt>SVN Checkout...</tt>) erzeugt man eine [[#Working Copy|Working Copy]] in einem lokalen, leeren Verzeichnis. Diese Funktion wird nur einmal im Leben einer [[#Working Copy|Working Copy]] verwendet.
Mit ''Projekt auschecken'' (<tt>SVN Checkout...</tt>) erzeugt man eine [[#Working Copy|Working Copy]] in einem lokalen, leeren Verzeichnis. Diese Funktion wird nur einmal im Leben einer [[#Working Copy|Working Copy]] verwendet.


'''Achtung:''' Auf keinen Fall einen [[#Projekt auschecken|Checkout]] in ein Verzeichnis machen, das bereits unter [[Versionsverwaltung]] steht.  
'''Achtung:''' Auf keinen Fall einen [[#Projekt auschecken|Checkout]] in ein Verzeichnis machen, das bereits unter [[Versionsverwaltung]] steht.  
=== Working Copy bearbeiten ===
=== Working Copy bearbeiten ===
Alle Dateien und Ordner in der [[#Working Copy|Working Copy]] können nahezu genauso bearbeitet werden, als wäre die [[#Working Copy|Working Copy]] ein normales Verzeichnis. Man kann Dateien und Verzeichnisse
Alle Dateien und Ordner in der [[#Working Copy|Working Copy]] können nahezu genauso bearbeitet werden, als wäre die [[#Working Copy|Working Copy]] ein normales Verzeichnis. Man kann Dateien und Verzeichnisse
Zeile 64: Zeile 68:


Mit dem ''Update'' der [[#Working Copy|Working Copy]] (<tt>SVN Update</tt>) holt man sich die Änderungen der anderen Benutzer auf seinen Rechner. Dabei werden dem Benutzer die einzelnen Änderungen, die durch das Update an seiner [[#Working Copy|Working Copy]] vorgenommen wurden, in einem Update-Log angezeigt. Je nach [[#Clients|Client]] sieht das natürlich verschieden aus, aber die folgenden Aktionen wird man oft zu sehen bekommen<ref>Für eine vollständige Liste siehe http://knaddison.com/technology/svn-status-code-cheat-sheet</ref>:  
Mit dem ''Update'' der [[#Working Copy|Working Copy]] (<tt>SVN Update</tt>) holt man sich die Änderungen der anderen Benutzer auf seinen Rechner. Dabei werden dem Benutzer die einzelnen Änderungen, die durch das Update an seiner [[#Working Copy|Working Copy]] vorgenommen wurden, in einem Update-Log angezeigt. Je nach [[#Clients|Client]] sieht das natürlich verschieden aus, aber die folgenden Aktionen wird man oft zu sehen bekommen<ref>Für eine vollständige Liste siehe http://knaddison.com/technology/svn-status-code-cheat-sheet</ref>:  
<table class="default">
<table class="default">
<tr><th>Deleted</th><td>Die Datei wurde von einem anderen Benutzer in der Zwischenzeit gelöscht.</td></tr>
<tr><th>Deleted</th><td>Die Datei wurde von einem anderen Benutzer in der Zwischenzeit gelöscht.</td></tr>
Zeile 72: Zeile 77:
</table>
</table>
<br clear="all">
<br clear="all">
=== Working Copy commiten ===
=== Working Copy commiten ===
Wenn die [[#Working Copy bearbeiten|lokalen Änderungen]] (für den Moment) abgeschlossen sind, können sie ''commited'' werden. Dadurch werden sie in das [[#Repository|Repository]] eingefügt und den anderen Benutzern zur Verfügung gestellt.
Bei einem Commit sollte man auch immer eine Log-Message schreiben, sodass der Rest des Teams nachvollziehen kann, was (oder warum) man geändert hat. Sie sollten sich auf ein einheitliches Format (oder wenigstens eine Sprache) für diese Nachrichten einigen.
Sollte man beim Commit einen Fehler erhalten, kann dies mehrere Ursachen haben:
* Die [[#Working Copy|Working Copy]] hat eine ältere [[#Revision|Revision]] als das [[#Repository|Repository]]. Man sollte immer ein [[#Working Copy updaten|Update]] vor dem Commit ausführen.
* Die [[#Working Copy|Working Copy]] enthält unaufgelöste [[#Conflicts|Conflicts]].
Sollte der Commit durch ein unerwartetes Ereignis unterbrochen werden, z.B. durch einen Stromausfall oder den Verlust der Verbindung zum [[#Repository|Repository]], sperrt [[Subversion]] die [[#Working Copy|Working Copy]] und ignoriert diesen Commit im [[#Repository|Repository]], um inkonsistente Zustände zu vermeiden. In diesem Fall sollte vor einem erneuten Commit ein [[#Cleanup|Cleanup]] der [[#Working Copy|Working Copy]] durchgeführt werden.
'''Achtung''': NIEMALS [[#Working Copy bearbeiten|Änderungen]] einchecken, die das [[#Repository|Repository]] ''breaken''! Das sind [[#Working Copy bearbeiten|Änderungen]], die dazu führen, das das Projekt nicht mehr [[Compiler|kompiliert]]. Die anderen Team-Mitglieder können dann ohne ihre Hilfe nicht mehr weiterarbeiten (und werden entsprechend dankbar sein)!
=== Revert ===
=== Revert ===
=== Ignore ===
=== Ignore ===
Man kann die meisten [[Subversion]]-[[#Client|Clients]] anweisen, bestimmte Dateien in allen folgenden Operationen zu ignorieren, d.h. sie explizit nicht unter Versionskontrolle stellen.
Das ist insbesondere für temporäre Dateien (die z.B. bei jedem [[Build]] neu erzeugt werden) oder Benutzer-spezifische Einstellungen sinnvoll und sollte von jedem verwendet werden.
Die folgenden Dateien und Verzeichnisse sind die ersten Kandidaten für einen Platz auf der Ignore-Liste:
<table class="default">
<tr><td class="blank"></td><th>Warum?</th></tr>
<tr><th><tt>bin</tt></th><td>...</td></tr>
<tr><th><tt>obj</tt></th><td>...</td></tr>
<tr><th><tt>*.suo</tt></th><td>Die Dateien mit der Endung .suo (''Solution User Options''<ref>[http://msdn.microsoft.com/en-us/library/bb165909(VS.80).aspx Solution User Options (.suo) in der MSDN]</ref>) beinhalten eine Reihe von Benutzer-spezifischen Einstellungen für [[VisualStudioTutorial|Visual Studio]], die niemanden außer den Benutzer selber interessieren. Sie enthalten außerdem eine Reihe von absoluten Pfadangaben, die bei anderen Benutzern massive Probleme auslösen können. Sie sollten auch keinen Fall zum [[#Repository|Repository]] [[#Working Copy commiten|hinzugefügt]] werden.</td></tr>
<tr><th><tt>*.cachefile</tt></th><td>...</td></tr>
</table>
=== Diff ===
=== Diff ===
Mit ''Diff'' kann man sich die [[#Working Copy bearbeiten|Änderungen]], die man seit dem letzten [[#Projekt auschecken|Checkout]] gemacht hat, anzeigen lassen. Das ist insbesondere für das Erstellen der [[#Working Copy commiten|Commit]]-Log-Message nützlich (man weiss wieder, was man eigentlich gemacht hat).
=== Conflicts ===  
=== Conflicts ===  
=== Blame ===
=== Blame ===
=== History ===  
=== History ===  
=== Browse ===
=== Browse ===
 
=== Cleanup ===


== Clients ==
== Clients ==
Abgerufen von „https://sopranium.de/Subversion