Subversion: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
Keine Bearbeitungszusammenfassung |
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 == | ||
