2009-04-13 5 views
25

Ich hatte eine Frage bezüglich der BASE-Version in SVN. Ich weiß, dass es die ursprüngliche Version eines Artikels von der letzten Zeit ist, die update ausgeführt wurde, und svn diff und Status im Grunde gegen diese Version laufen. Wann wird die BASE aktualisiert? Wird es aktualisiert, wenn das Update ausgeführt wird? Trifft dies immer zu, auch wenn während des Updates ein Konflikt aufgetreten ist? Was hat BASE in einem Konflikt? Hat es immer noch die Version von meinem letzten Update (vor dem letzten Update, das einen Konflikt verursacht hat) oder wird es auf den HEAD aktualisiert, auch wenn es einen Konflikt gibt?
Auch wenn svn commit ausgeführt wird, nehme ich an, dass die BASE mit meinen lokalen Änderungen aktualisiert wird und an diesem Punkt BASE, HEAD und meine lokale Kopie alle gleich sind? Vorausgesetzt das Commit war erfolgreich.Wann wird svn BASE gleich dem HEAD

Antwort

38

HEAD ist die neueste Revision im Repository. BASE ist die letzte Revision, die Sie vom Repository erhalten haben. Sie sind nach einem erfolgreichen Commit oder Update identisch.

Wenn Sie Änderungen vornehmen, unterscheiden sich Ihre Dateien von den BASE-Kopien. Wenn Sie zurückkehren, gehen sie zurück zur BASE-Revision. Wenn Sie einen Konflikt erhalten, aktualisieren Sie das Repository nicht. Ihre Dateien werden vielmehr als "bearbeitet" betrachtet, als würden Sie Änderungen vornehmen. Nachdem Sie Konflikte gelöst haben, haben Sie im Wesentlichen entschieden, wie die endgültigen Dateien aussehen werden, und Sie werden sie dann wie gewohnt übernehmen. Konflikte sind also wie eine spezielle Bearbeitung.

+3

Sie sind die gleichen, jedoch kurz nach einem Update, aber nicht unbedingt nach einem Festschreiben. Betrachten Sie Verzeichnisse und "gemischte Revision Arbeitskopien". – bendin

+0

Anscheinend schaffen diese "gemischten Revisionsarbeitskopien" - was bedeutet, dass Sie ein Commit ohne vollständige Kenntnis dessen, was vor sich geht - erstellen, ist eine Folge einer der "fundamentalen Regeln von Subversion". –

7

BASE ist die Revision Ihrer Arbeitskopie, wie sie im Repository vorhanden ist. Mit anderen Worten, Ihre Revision ohne die Änderungen, die Sie vorgenommen haben. Wenn Sie also eine Datei oder einen Ordner zu HEAD svn update, dann sind BASE und HEAD gleich.

Wenn ein Konflikt auftritt, wird BASE zur Revision vor dem Commit, das mit Ihrer Arbeitskopie in Konflikt steht.

Führen Sie svn info auf einem Element aus, um seine BASE-Revision zu sehen.

Revision Specifiers

0

Theorie: Nach einem erfolgreichen rekursiven Update oder Wechsel der Basisversion aller Ihrer Dateien wird Kopf. Nach einem Commit oder einer teilweisen Aktualisierung befinden sich einige Dateien möglicherweise in der HEAD-Revision, aber erst nach einem Update, bei dem keine Dateien übersprungen wurden, können Sie sicher sein, dass alle Dateien die gleiche Version haben. (Gründe für das Überspringen sind unversionierte Hindernisse oder Konflikte).

Aber, warum sollten Sie dies wissen müssen. Subversion sollte dies intern wissen, aber dieses Wissen sollte in den meisten Fällen für den Benutzer keine Rolle spielen. (Subversion warnt Sie automatisch, wenn Dateien veraltet sind).

Soweit ich das beurteilen kann, ist die einzige Zeit, die Sie wirklich sicherstellen müssen, dass Sie in einer stabilen Version sind, wenn Sie eine Verzweigung von einer Arbeitskopie erstellen.

+1

Ich wollte nur herausfinden, wie Svn funktioniert und seine Implementierungsdetails. Vielen Dank für Ihre Antwort. – HeretoLearn

3

Es ist wichtig, wenn Sie Protokolle anzeigen, weil Svn Log ohne URL zeigt Ihr BASE-Protokoll, aber mit URL Ihr HEAD-Protokoll, deshalb verwende ich immer "Svn Log -rHEAD: 1", um alle Änderungen zu sehen.

Verwandte Themen