Subversion: Unterschied zwischen den Versionen
Aus Das Sopra Wiki
Roth (Diskussion | Beiträge) |
KKeine Bearbeitungszusammenfassung |
||
| (12 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
| Zeile 9: | Zeile 9: | ||
* kurz: es ermöglicht mehreren Entwicklern komfortabler an einem Projekt gemeinsam und gleichzeitig zu arbeiten. | * kurz: es ermöglicht mehreren Entwicklern komfortabler an einem Projekt gemeinsam und gleichzeitig zu arbeiten. | ||
Wir verwenden [[Subversion]] im Sopra um genau diese Punkte zu ermöglichen. Jede [[Gruppeneinteilung|Gruppe]] erhält ihr eigenes [[#Repository|Repository]] und | Wir verwenden [[Subversion]] im Sopra um genau diese Punkte zu ermöglichen. Jede [[Gruppeneinteilung|Gruppe]] erhält ihr eigenes [[#Repository|Repository]] und auch ein [[Trac]], um ihr Projekt zu verwalten. | ||
[[Subversion]] besitzt eine Client-Server-Architektur, sodass man neben dem Original-[[Subversion]]-Client<ref>[http://subversion.tigris.org/ offizielle Seite] des [[Subversion]]-Projekts</ref> auch einen beliebigen [[Subversion]]-[[#Clients|Client]] verwenden kann. | [[Subversion]] besitzt eine Client-Server-Architektur, sodass man neben dem Original-[[Subversion]]-Client<ref>[http://subversion.tigris.org/ offizielle Seite] des [[Subversion]]-Projekts</ref> auch einen beliebigen [[Subversion]]-[[#Clients|Client]] verwenden kann. | ||
| Zeile 104: | Zeile 104: | ||
<tr><th><tt>_ReSharper.#PROJEKTNAME#</tt></th><td>Dieses Verzeichnis wird vom Resharper automatisch generiert. Automatisch generierte Ordner sollen nicht ins SVN, siehe <tt>bin</tt>.</td></tr> | <tr><th><tt>_ReSharper.#PROJEKTNAME#</tt></th><td>Dieses Verzeichnis wird vom Resharper automatisch generiert. Automatisch generierte Ordner sollen nicht ins SVN, siehe <tt>bin</tt>.</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 sollen auf keinen Fall zum [[#Repository|Repository]] [[#Working Copy commiten|hinzugefügt]] werden.</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 sollen auf keinen Fall zum [[#Repository|Repository]] [[#Working Copy commiten|hinzugefügt]] werden.</td></tr> | ||
<tr><th><tt>*.cachefile</tt></th><td>Siehe <tt>bin</tt>. Auch merkt sich [[ | <tr><th><tt>*.cachefile</tt></th><td>Siehe <tt>bin</tt>. Auch merkt sich [[MonoGame]] hier, welche Dateien es schon in ein ihm genehmes Format konvertiert hat. Wenn ein anderes Teammitglied eine neue Datei hinzufügt und diese Datei im <tt>.cachefile</tt> als bereits konvertiert markiert ist, kann es passieren daß sich XNA denkt "Hey die Datei hab ich doch schon" und sie nicht neu konvertiert.</td></tr> | ||
<tr><th><tt> | <tr><th><tt>*.DotSettings.user</tt></th><td>Diese Datei enthält Benutzerspezifische Resharper Einstellungen und soll entsprechend auch nicht eingecheckt werden.</td></tr> | ||
<tr><th><tt>*.thumb</tt></th><td> | <tr><th><tt>*.thumb</tt></th><td>Von Windows generierte Datei, die Vorschaubilder für die Miniaturansicht im Explorer enthält.</td></tr> | ||
<tr><th><tt>thumbs.db</tt></th><td>...</td></tr> | <tr><th><tt>thumbs.db</tt></th><td>Siehe .thumb</td></tr> | ||
<tr><th><tt>.vs</tt></th><td>Von Visual Studio generiertes Verzeichnis für interne Einstellungen.</td></tr> | |||
</table> | </table> | ||
'''Hinweis:''' Bei Nutzung von [[Downloads#Subversion | TortoiseSVN]] als SVN Client müssen zuerst die Umgebenden Ordner eingecheckt werden damit die Ignore-Regeln gesetzt werden können! Also als erstes einfach das gesamte Projekt mit Ausnahme der zu ignorierenden Ordner und Dateien committen. Dann zu den zu ignorierenden Daten gehen und per Rechtsklick und Tortoise Menü auf die Ignore-Liste setzen (Das geht alternativ auch im Commit-Fenster). Sobald alle Ignore-Regeln gesetzt sind nocheinmal Committen damit die Ignore Regeln im SVN gespeichert sind. | '''Hinweis:''' Bei Nutzung von [[Downloads#Subversion | TortoiseSVN]] als SVN Client müssen zuerst die Umgebenden Ordner eingecheckt werden damit die Ignore-Regeln gesetzt werden können! Also als erstes einfach das gesamte Projekt mit Ausnahme der zu ignorierenden Ordner und Dateien committen. Dann zu den zu ignorierenden Daten gehen und per Rechtsklick und Tortoise Menü auf die Ignore-Liste setzen (Das geht alternativ auch im Commit-Fenster). Sobald alle Ignore-Regeln gesetzt sind nocheinmal Committen damit die Ignore Regeln im SVN gespeichert sind. | ||
Über die Kommandozeile fügt man Ordner/Dateien mittels <code>svn propset svn:ignore <Datei/Ordnername> .</code> hinzu. Oder man editiert die ignore Datei direkt mittels <code>svn propedit svn:ignore .</code> hier kann man durch newlines getrennt [http://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html#tag_02_13 pattern] für auszuschließende Objekte angeben | |||
=== Diff === | === Diff === | ||
| Zeile 115: | Zeile 118: | ||
=== Conflicts === | === Conflicts === | ||
[[Image:TortoiseSVN_commit_failed.png|thumb|right|300px|[[Subversion#TortoiseSVN|TortoiseSVN]] Dialog: Commit schlägt fehl, da <code>foo.cpp</code> in neuerer Revision vorliegt]] | |||
Konflikte treten auf, wenn eine geänderte Datei committed wird, die in der Zwischenzeit in einer neueren Revision im Projekt-Archiv vorliegt. Konflikte bemerkt man entweder beim Committen <code>svn: Out of date</code> oder nach einem Update an der Markierung der Datei mit einem <code>C</code>. | |||
Öffnet man die Datei sieht man die Konflikt behafteten Stellen: | |||
<<<<<<< .mine | |||
Das habe ich geschrieben | |||
======= | |||
Das steht in der letzten Revision im Projekt-Archiv (Hier Revision 42) | |||
>>>>>>> .r42 | |||
Nach dem <code>svn update</code> sieht man jetzt 4 Versionen der betroffenen Datei <code>foo.cpp</code> | |||
foo.cpp -> Die Datei mit den Markierungen wie oben. | |||
foo.cpp.mine -> Die Datei mit nur meinen Änderungen. | |||
foo.cpp.r41 -> Die Datei vor meinen Änderungen. (Also Revision 41 der Datei). | |||
foo.cpp.r42 -> Die Datei mit nur den Änderungen aus dem Projekt-archiv. (Also Revision 42 der Datei). | |||
Jetzt kann mann sich entscheiden | |||
==== Letzte Revision im Projektarchiv verwenden ==== | |||
Hier werden meine Änderungen verworfen (das bedeutet '''alles was ich an der conflicted Datei geändert habe ist verloren''' und wird auch in keiner History gespeichert) und es wird die Letzte Revision aus dem Projekt-Archiv verwendet. | |||
<code>svn resolve --accept theirs-full foo.cpp</code>. | |||
==== Meine Änderungen verwenden und die Änderungen an der Letzten Revision(en) wegschmeißen ==== | |||
Eine Möglichkeit wäre: Man löscht die Datei <code>foo.cpp</code> nennt <code>foo.cpp.mine</code> in <code>foo.cpp</code> um. Jetzt muss man SVN mitteilen, dass der Konflikt behoben ist indem man <code>svn resolve foo.cpp</code> ausführt. SVN kümmert sich um die <code>foo.cpp.r<id></code> dateien. Das ganze geht auch mit einem Befehl: <code>svn resolve --accept mine-full foo.cpp</code>. | |||
Jetzt sind in der aktuellen Revision nur meine Änderungen an der Datei. Alle Änderungen die in der Zwischenzeit vorgenommen wurden sind entfernt (allerdings noch in der History einsehbar). | |||
==== Das beste aus Beiden Versionen behalten ==== | |||
[[Image:TortoiseMerge.png|thumb|right|300px|[[Subversion#TortoiseSVN|TortoiseSVN]] Merge tool]] | |||
Hier muss man die datei <code>foo.cpp</code> öffnen und alle Markierten Stellen von Hand bearbeiten, so dass am Ende das gewünschte übrig bleibt. Nach dem Speichern teilt man SVN mittels | |||
<code>svn resolve foo.cpp</code> mit das nun alles in Ordnung ist. SVN kümmert sich (löscht) die verbleibenden Dateien und man kann jetzt committen. Um sich den Prozess der Bearbeitung zu erleichtern gibt es auch eine ganze reihe Tools und Plugins für fast alle gängigen Editoren. | |||
[[Subversion#TortoiseSVN|TortoiseSVN]] bietet einen Merge-Editor an. Diesen startet man für eine conflicted Datei mittels Rechtsklick auf diese wählt dann ''"Edit conflicts"'' dies öffnet den Editor (siehe rechts). Hier ist die obere linke Hälfte die aktuelle Revision im Projekt-Archiv (Mit "Theirs" betitelt). Die rechte Hälfte (mit "Mine" betitelt) öffnet die <code>foo.cpp.mine</code> datei. In Orange ist jeweils die Differenz markiert (die Zeile dient zur Orientierung wie sie vor dem Konflikt war). Im unteren Editor kann man nun unter jeder orangen Zeile entscheiden, welchen Teil man übernehmen möchte. Mit Rechtsklick auf die Zeile wählt man für jede Differenz <code>Use text block from "theirs"</code> für den Code aus der aktuellen Revision im Projekt-Archiv oder <code>Use text block from "mine"</code> um den Code aus meinen Änderungen zu benutzen. Man kann auch etwas komplett anderes direkt in die Zeilen Schreiben. | |||
Ist man mit der Bearbeitung fertig, klickt man oben links aus "Save". Jetzt sollte man schauen, ob die Datei auch wirklich so ist wie man sie möchte und ob das Projekt noch kompiliert etc. Dann kann man die Datei mit ''Rechtsklick -> TurtoiseSVN -> Resolve'' (Dies ist auch in der Taskleiste im MergeEditor möglich) als "resolved" markieren und committen. | |||
=== History === | === History === | ||
| Zeile 182: | Zeile 223: | ||
* [http://www.cs.put.poznan.pl/csobaniec/Papers/svn-refcard.pdf Cheat-Sheet für Subversion] | * [http://www.cs.put.poznan.pl/csobaniec/Papers/svn-refcard.pdf Cheat-Sheet für Subversion] | ||
[[Kategorie: | [[Kategorie:Veraltet]] | ||
