it-swarm.com.de

Checke eine Datei von Subversion aus

"Es ist nicht möglich, eine einzelne Datei auszuchecken. Die beste Ebene für das Auschecken ist die Verzeichnisebene."

Wie kann ich dieses Problem umgehen, wenn ich Subversion verwende?

Wir haben diesen Ordner in Subversion, in dem wir alle unsere Bilder aufbewahren. Ich möchte nur eine Datei (Bild) auschecken. Dieser Ordner ist wirklich groß und hat eine Menge anderer Sachen, die ich jetzt nicht brauche.

312
bluegene

Die einfache Antwort ist, dass Sie svn export die Datei, anstatt sie auszuchecken.

Aber das ist vielleicht nicht das, was du willst. Möglicherweise möchten Sie die Datei bearbeiten und erneut einchecken, ohne dass Sie nicht benötigte GB Junk herunterladen müssen.

Wenn Sie Subversion 1.5+ haben, führen Sie eine sparsame Prüfung durch:

svn checkout <url_of_big_dir> <target> --depth empty
cd <target>
svn up <file_you_want>

Für eine ältere Version von SVN können Sie von folgenden Vorteilen profitieren:

  • Durchsuchen Sie das Verzeichnis mit einer Überarbeitung in der Vergangenheit, in der es weniger Junk enthielt, als Sie es brauchen.
  • Aktualisieren Sie die gewünschte Datei, um eine gemischte Revision zu erstellen. Dies funktioniert auch dann, wenn die Datei in der von Ihnen ausgecheckten Revision nicht vorhanden war.
  • Profitieren!

Eine Alternative (zum Beispiel, wenn das Verzeichnis von der Revision an, in der es erstellt wurde, zu viel Junk hat) besteht darin, eine URL-> URL-Kopie der gewünschten Datei an einem neuen Ort im Repository zu erstellen (im Grunde ist dies ein funktionierender Zweig) der Datei). Überprüfen Sie das Verzeichnis und nehmen Sie Ihre Änderungen vor.

Ich bin mir nicht sicher, ob Sie Ihre geänderte Kopie dann wieder vollständig im Repository zusammenführen können, ohne eine Arbeitskopie des Ziels zu haben - das habe ich nie nötig. Wenn ja, dann mach das.

Wenn nicht, müssen Sie möglicherweise jemanden finden, der das gesamte Verzeichnis ausgecheckt hat, und ihn dazu bringen, dies zu tun. Oder wenn Sie Ihre Änderungen vorgenommen haben, ist der Download des Rests abgeschlossen ...

392
Steve Jessop

Versuchen svn export anstatt svn checkout. Das funktioniert für einzelne Dateien.

Der Grund für die Einschränkung ist, dass checkout eine Arbeitskopie erstellt, die Metainformationen zu Repository, Revision, Attributen usw. enthält. Diese Metadaten werden in Unterverzeichnissen mit dem Namen '.svn' gespeichert. Und einzelne Dateien haben keine Unterverzeichnisse.

106
Mnementh

Verwenden svn cat oder svn export.

Dafür müssen Sie das Arbeitsverzeichnis nicht abrufen, können jedoch keine von Ihnen vorgenommenen Änderungen festschreiben. Wenn Sie Änderungen vornehmen und festschreiben müssen, benötigen Sie ein Arbeitsverzeichnis, das Sie jedoch nicht vollständig abrufen müssen. Überprüfen Sie die Revision, in der das Verzeichnis noch/fast leer war, und extrahieren Sie die Datei mit 'svn cat' aus HEAD.

53
Milan Babuškov

Wenn Sie readme.txt in Ihrem Repository anzeigen möchten, ohne es auszuchecken:

$ svn cat http://svn.red-bean.com/repos/test/readme.txt
Dies ist eine README Datei. Das solltest du lesen.

Tipp: Wenn Ihre Arbeitskopie veraltet ist (oder Sie lokale Änderungen vorgenommen haben) und Sie die HEAD - Revision einer Datei in Ihrer Arbeitskopie sehen möchten, ruft svn cat die HEAD - Revision automatisch ab, wenn Du gibst ihm einen Weg:

$ cat foo.c
Diese Datei befindet sich in meiner lokalen Arbeitskopie und hat Änderungen, die ich vorgenommen habe.

$ svn cat foo.c
Letzte Revision frisch aus dem Repository!

Quelle

12
GEOCHET

Eine TortoiseSVN-äquivalente Lösung der akzeptierten Antwort (ich hatte dies in einem internen Dokument für mein Unternehmen geschrieben, da wir SVN neu einführen) folgt. Ich dachte, es wäre hilfreich, auch hier zu teilen:

Auschecken einer einzelnen Datei: Subversion unterstützt nicht das Auschecken einer einzelnen Datei, sondern nur das Auschecken von Verzeichnisstrukturen. (Referenz: http://Subversion.tigris.org/faq.html#single-file-checkout ). Dies liegt daran, dass bei jedem Verzeichnis, das als Arbeitskopie ausgecheckt wird, die Metadaten zu Änderungen/Dateirevisionen als interner versteckter Ordner (.svn/_svn) gespeichert werden. Dies wird derzeit (v1.6) für einzelne Dateien nicht unterstützt.

Alternative empfohlene Strategie: Sie müssen den Teil des Auscheckverzeichnisses nur einmal ausführen. Anschließend können Sie Ihre einzelnen Dateien direkt auschecken. Checken Sie den übergeordneten Ordner und die Verzeichnisstruktur sparsam aus. Bei einem spärlichen Auschecken wird grundsätzlich nur die Ordnerstruktur ausgecheckt, ohne dass die Inhaltsdateien ausgefüllt werden. Sie checken also nur die Verzeichnisstrukturen aus und müssen nicht ALLE Dateien auschecken, da dies das Problem war. Referenz: http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-dug-checkout.html

Schritt 1 : Fahren Sie mit dem Repository-Browser fort

Schritt 2 : Klicken Sie mit der rechten Maustaste auf den übergeordneten Ordner im Repository, der alle Dateien enthält, an denen Sie arbeiten möchten, und wählen Sie Auschecken.

Schritt 3 : Stellen Sie in einem neuen Popup-Fenster sicher, dass das Checkout-Verzeichnis auf den richtigen Ort auf Ihrem lokalen PC verweist. Es wird auch ein Dropdown-Menü mit der Bezeichnung "Checkout-Tiefe" angezeigt. Wählen Sie je nach Anforderung „Nur dieses Element“ oder „Sofortige Kinder, einschließlich Ordner“. Die zweite Option wird empfohlen, da Sie, wenn Sie an einem verschachtelten Ordner arbeiten möchten, das nächste Mal direkt fortfahren können. Andernfalls müssen Sie den gesamten Vorgang für den verschachtelten Ordner erneut ausführen.

Schritt 4 : Die übergeordneten Ordner sollten jetzt in Ihrem lokal ausgewählten Ordner verfügbar sein und werden jetzt mit SVN (einem versteckten Ordner „.svn“) überwacht "Oder" _svn "sollte jetzt vorhanden sein). Klicken Sie im Repository jetzt mit der rechten Maustaste auf die einzelne Datei, die Sie allein ausgecheckt haben möchten, und wählen Sie die Option „Zu überarbeitendes Element aktualisieren“. Die einzelne Datei kann nun bearbeitet und wieder in das Repository eingecheckt werden.

Ich hoffe das hilft.

8
Kaushik Gopal

Sie können dies in zwei Schritten tun:

  1. Checke ein leeres SVN-Repository nur mit Metainformationen aus:

    $ cd /tmp
    
    $ svn co --depth empty http://svn.your.company.ca/training/trunk/sql
    
  2. Lauf svn up um die angegebene Datei zu aktualisieren:

    $ svn up http://svn.your.company.ca/training/trunk/sql/showSID.sql
    
6
user2920375

Ein Update für den Fall, dass Sie es wirklich brauchen, kann dadurch abgedeckt werden, dass die Datei in einem Checkout eines anderen Ordners enthalten ist.

Seit SVN 1.6 können Sie Datei externals , eine Art von SVN-Links erstellen. Dies bedeutet, dass Sie einen anderen versionierten Ordner haben können, der eine einzelne Datei enthält. Das Übernehmen von Änderungen an der Datei in einem Checkout dieses Ordners ist ebenfalls möglich.

Es ist sehr einfach, überprüfen Sie den Ordner, in den Sie die Datei einfügen möchten, und fügen Sie dem Ordner einfach eine Eigenschaft hinzu

svn propedit svn:externals .

mit Inhalten wie diesen:

file.txt /repos/path/to/file.txt

Nachdem Sie dies festgeschrieben haben, wird die Datei in zukünftigen Auscheckvorgängen des Ordners angezeigt. Grundsätzlich funktioniert es, aber es gibt einige Einschränkungen, wie in der oben verlinkten Dokumentation beschrieben.

5
Mikkel Blanné

Ich würde es nur durchsuchen und die einzelne Datei exportieren. Wenn Sie über HTTP-Zugriff verfügen, suchen Sie die Datei mit dem Webbrowser und greifen Sie darauf zu.

Wenn Sie es nach der Bearbeitung wieder einspielen müssen, ist das vielleicht etwas langwieriger, aber ich bin mir sicher, dass es eine svn import - Funktion gibt ...

4
Oli

Gehen Sie zum Repo-Browser, klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie "Speichern unter". Ich verwende jedoch TortoiseSVN.

4
Dave Anderson

Steve Jessops Antwort hat bei mir nicht funktioniert. Ich habe die Hilfedateien für SVN gelesen und wenn Sie nur ein Bild haben, möchten Sie es wahrscheinlich erst wieder einchecken, wenn Sie Photoshop ausführen. Exportieren ist ein besserer Befehl als checkout, da er nicht versioniert ist (aber das ist geringfügig).

Und die - Tiefe ARG sollte nicht leer sein , sondern files um die Dateien in das unmittelbare Verzeichnis zu bekommen. Sie erhalten also alle Felder, nicht nur das eine, sondern leere gibt nichts aus dem Repository zurück.

 svn co --depth files <source> <local dest>

oder

svn export --depth files <source> <local dest>

Bei den anderen Antworten können Sie mit cat den Inhalt lesen, der nur für Text und nicht für Bilder aller Dinge geeignet ist.

4
Vass

Wenn Sie nur eine Datei ohne Revisionsinformationen benötigen, verwenden Sie

svn export <URL>
2
Ted

Mit Subversion 1.5 ist es möglich, alle Dateien eines Verzeichnisses auszuchecken, ohne Unterverzeichnisse auszuchecken (die verschiedenen --depth-Flags). Nicht ganz das, wonach Sie gefragt haben, aber eine Form von "weniger als alles".

2
jackr

Wenn Sie die Datei nur exportieren möchten und sie später nicht aktualisieren müssen, können Sie dies tun, ohne SVN-Befehle verwenden zu müssen.

Wählen Sie mit TortoiseSVN Repository Browser die Datei aus, klicken Sie mit der rechten Maustaste und wählen Sie dann "RL in Zwischenablage kopieren". Fügen Sie diese URL in Ihren Browser ein. Nach der Anmeldung sollten Sie aufgefordert werden, die Datei herunterzuladen.

Auf diese Weise können Sie auch die gewünschte Revision auswählen und eine ältere Version der Datei herunterladen.

Beachten Sie, dass dies gültig ist, wenn Ihr SVN-Server über eine Webschnittstelle verfügt.

1
Daniel

Ich wollte eine einzelne Datei in ein Verzeichnis auschecken, das nicht Teil einer Arbeitskopie war.

Laden Sie die Datei unter der folgenden URL herunter: http: //Subversion.repository.server/repository/module/directory/myfile

svn co  http://Subversion.repository.server/repository/module/directory/myfile /**directoryb**

Also habe ich das angegebene Verzeichnis ausgecheckt, das die Zieldatei enthält, die ich in ein Dummy-Verzeichnis verschieben wollte (sagen wir etcb für die URL, die mit /etc Endet).

Dann habe ich die Datei . Svn/entries von allen Dateien des Zielverzeichnisses geleert, die ich nicht benötigt habe, um nur die gewünschte Datei zu hinterlassen. In dieser . Svn/entries Datei haben Sie einen Datensatz für jede Datei mit ihren Attributen. Lassen Sie also nur den Datensatz für die Datei, die Sie abrufen und speichern möchten.

Jetzt musst du nur noch '' .svn '' in das Verzeichnis kopieren, das eine neue "Arbeitskopie" sein wird. Dann müssen Sie nur noch:

cp .svn /directory
cd /directory
svn update myfile

Das Verzeichnis directory befindet sich nun unter Versionskontrolle. Vergessen Sie nicht, das Verzeichnis directoryb zu entfernen, das nur eine temporäre Arbeitskopie war.

1
hendergassler

Mach so etwas:

mkdir <your directory>/repos/test

svn cat http://svn.red-bean.com/repos/test/readme.txt > <your directory>/repos/test/readme.txt

Grundsätzlich ist die Idee, das Verzeichnis zu erstellen, in dem Sie die Datei von SVN abrufen möchten. Verwenden Sie die svn cat befehle und leite die Ausgabe in die gleichnamige Datei um. Standardmäßig gibt die Katze Informationen über stdio aus.

1
Manish Singh

Mit der Sparse-Check-Out-Technik können Sie eine bestimmte Datei auschecken, die bereits ausgecheckt ist oder existiert ... mit einem einfachen Trick:

Nachdem Sie die oberste Ebene Ihres Repositorys mit der Option "Nur dieses Element" ausgecheckt haben, MÜSSEN Sie im Windows-Explorer zuerst mit der rechten Maustaste auf die zu aktualisierende Datei klicken. Wählen Sie im Kontextmenü den Befehl Repo Browser. Suchen Sie diese Datei WIEDER im Repository-Browser und klicken Sie mit der rechten Maustaste. Sie sollten jetzt das "Update Item to Revision" im Kontextmenü sehen.

Ich bin mir nicht sicher, ob es sich um ein undokumentiertes Feature oder einfach um einen Bug handelt. Ich brauchte längere Stunden nach der Arbeit, um diesen Trick endlich zu finden. Ich benutze TortoiseSVN 1.6.2.

1
devXen

Dieses Problem wird behandelt von:

http://Subversion.tigris.org/issues/show_bug.cgi?id=82

Es ist ein Skript beigefügt, mit dem Sie eine einzelne Datei von svn auschecken, Änderungen vornehmen und die Änderungen wieder in das Repository übertragen können. Sie können jedoch nicht "svn up" ausführen, um den Rest des Verzeichnisses auszuchecken. Es wurde mit svn-1.3, 1.4 und 1.6 getestet.

0
ddkilzer

Da keine der anderen Antworten für mich funktioniert hat, habe ich diesen Hack benutzt:

$ cd /yourfolder
svn co https://path-to-folder-which-has-your-files/ --depth files

Dadurch wird ein neuer lokaler Ordner erstellt, der nur die Dateien aus dem Remote-Pfad enthält. Dann können Sie einen symbolischen Link zu den Dateien erstellen, die Sie hier haben möchten.

0
Lacho Tomov