Unterschied zwischen Checkout und Export in SVN

74

Was ist der genaue Unterschied zwischen SVN-Checkout und SVN-Export?

Soweit ich weiß, enthält der Export nicht das .svn-Verzeichnis, das Metadaten enthält, und das Auschecken enthält dieses .svn-Verzeichnis. Mein Kollege hatte jedoch kürzlich das Problem, dass es ein anderes Verhalten für die aus Quellen kompilierten Inhalte gibt, die auschecken und aus SVN-Repo exportiert werden. Beide wurden korrekt kompiliert, aber der aus svn exportWerken kompilierte, aber der ausgecheckte funktioniert überhaupt nicht.

PS: Das kompilierte Material ist der Linux 2.4-Kernel, der in einem eingebetteten Gerät verwendet wird. Das Bild wird kompiliert und korrekt geladen, aber das ausgecheckte funktioniert nicht. Es verursacht eine Kernel-Panik während Insmod. Warum konnte das überhaupt passieren?

PPS: Wir haben das Prüfsummen- und Diff-Tool ausprobiert, um den Unterschied zwischen den beiden Verzeichnissen zu überprüfen, die aus SVN exportiert und ausgecheckt werden. Beide sind bis auf das .svn-Verzeichnis identisch.

andycjw
quelle
6
Der Titel Ihrer Frage lädt leider zu vielen Erklärungen für den Unterschied zwischen Kaufabwicklung und Export ein. Die Erwähnung des Absturzes könnte bessere Hilfe bringen.
Gbarry

Antworten:

103

svn exportextrahiert einfach alle Dateien aus einer Revision und erlaubt keine Revisionskontrolle darauf. Es verschmutzt auch nicht jedes Verzeichnis mit .svn-Verzeichnissen.

svn checkoutErmöglicht die Verwendung der Versionskontrolle in dem erstellten Verzeichnis, z. B. Ihren Standardbefehlen wie svn updateund svn commit.

gak
quelle
16
Beachten Sie, dass dies wirklich nicht das ist, was er wissen muss.
Gbarry
11

Wie Sie bereits sagten, enthält eine Kasse die .svn-Verzeichnisse. Somit handelt es sich um eine Arbeitskopie, die über die richtigen Informationen verfügt, um Commits zurückzusenden (sofern Sie die Erlaubnis dazu haben). Wenn Sie einen Export durchführen, nehmen Sie nur eine Kopie des aktuellen Status des Repositorys und haben keine Möglichkeit, Änderungen zurückzuschreiben.

notbenh
quelle
9

Führen Sie Ihre Kaufabwicklung erneut aus oder exportieren Sie sie in ein vorhandenes Verzeichnis?

Wenn Sie dies tun, aktualisiert checkout die Arbeitskopie, einschließlich des Löschens aller Dateien.

Beim Export werden jedoch einfach alle Dateien vom Reporsitory zum Ziel übertragen. Wenn das Ziel dasselbe Verzeichnis ist, bedeutet dies, dass alle im Repository gelöschten Dateien NICHT gelöscht werden.

Ihre Exportkopie funktioniert also möglicherweise nur, weil sie auf einer Datei basiert, die im Repository gelöscht wurde?

Ausnahme
quelle
Danke, das funktioniert bei mir, da meine gelöschten Dateien auch nach dem Festschreiben angezeigt wurden, da ich den SVN-Export anstelle des SVN-Checkout verwendet habe.
Useranon
6

Gibt es eine Chance, dass der Erstellungsprozess in die Unterverzeichnisse schaut und etwas enthält, das er nicht sollte? Übrigens können Sie eine legale Prüfung durchführen und dann die .svn und alles, was sie enthält, entfernen. Das sollte Ihnen das gleiche geben wie ein Export. Versuchen Sie, dies vor und nach dem Entfernen der Metadaten sozusagen zu kompilieren.

gbarry
quelle
Wir haben das schon einmal versucht, es funktioniert nicht für uns, es ist wirklich frustrierend für uns beide.
Andycjw
Vergleichen Sie eine neue Kaufabwicklung mit einem Export oder einem Repository, das einmal ausgecheckt und auf einen Export aktualisiert wurde? In letzterem Fall liegt möglicherweise eine Kruft herum, die in den Build gezogen wird.
Warten...! Was bedeutet "nicht funktionieren"? Dass der Build funktioniert und das Experiment fehlschlägt oder der Build fehlschlägt und somit beweist, dass die Metadaten ihn verwirren?
Gbarry
"funktioniert nicht" bedeutete hier mit der legalen Kasse und entfernt von .svn mit "find". -name .svn | xargs rm -rf ', der Build funktioniert nicht genau wie der Export, wenn es sein sollte, da der Export, wie jeder weiß, nur ohne die .svn-Metadaten zur Versionskontrolle
ausgecheckt wird
Wenn Sie also Teile von .svn entfernen (oder vielleicht nur eine leere .svn haben), können Sie "teilen und erobern" und letztendlich herausfinden, was dazu führt, dass es fehlschlägt. Jedenfalls bei unendlicher Zeit. Haben Sie die beiden Kernel-Images unterschieden? (und die
Modulbilder
2

(Um Geralds Antwort zu ergänzen ...) Ein weiterer subtiler Unterschied ist der, obwohl der Befehl:

svn checkout ...repos_location/my_dir .

legt die Dateien im my_diraktuellen Verzeichnis ab (mit dem .svnOrdner)

in bestimmten versionen des svn der befehl:

svn export ...repos_location/my_dir .

erstellt einen Ordner mit dem Namen my_dirim aktuellen Verzeichnis und legt die exportierten Dateien darin ab.

Robino
quelle
2

Verwenden Sie den Export, wenn Sie ein Projekt hochladen (oder jemandem geben) möchten. Wenn Sie mit einem Projekt arbeiten, verwenden Sie die Kasse.

Pawka
quelle
1

Zusätzliche Überlegungen. Du hast gesagt, Insmod stürzt ab. Insmod lädt Module. Die Module werden in einer anderen Kompilierungsoperation aus dem Erstellen des Kernels erstellt. Kernel und Module müssen aus denselben Headern usw. erstellt werden. Werden alle Module während des Kernel-Builds erstellt oder sind sie "vorhanden"?

Die andere Idee und etwas, über das ich wenig weiß, ist svn externals, was (falls verwendet) Auswirkungen darauf haben kann, was in Ihrem Projekt ausgecheckt wird. Überprüfen Sie, ob dies beim Exportieren anders ist.

gbarry
quelle
0

Sehr einfacher Unterschied: Wenn Sie nur die Struktur Ihres Projekts sehen möchten, gehen Sie zum Export.

Und wenn Sie an Ihren Dateien arbeiten möchten, müssen Sie auschecken, da dieser den Ordner .svn enthält, der die Metadaten enthält, aus denen die Arbeitskopie erstellt wird. Andernfalls wird beim Export der Fehler angezeigt.

Wenn Sie svn exporteinige Dateien bearbeiten und dann festschreiben, wird eine Fehlermeldung angezeigt:

../../xxx ist nicht Ihre Arbeitskopie.

SteveScm
quelle
-1

Wenn Sie den Schildkröten-SVN-Client verwenden, wird beim Exportieren ..export / checkout angezeigt. Dies ist verwirrend und wird nur exportiert. Nur View / Read Use Export, um Use festzuschreiben - "Checkout"

TheFixer
quelle