"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.
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:
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 ...
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.
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.
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!
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.
Sie können dies in zwei Schritten tun:
Checke ein leeres SVN-Repository nur mit Metainformationen aus:
$ cd /tmp
$ svn co --depth empty http://svn.your.company.ca/training/trunk/sql
Lauf svn up
um die angegebene Datei zu aktualisieren:
$ svn up http://svn.your.company.ca/training/trunk/sql/showSID.sql
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.
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 ...
Gehen Sie zum Repo-Browser, klicken Sie mit der rechten Maustaste auf die Datei und wählen Sie "Speichern unter". Ich verwende jedoch TortoiseSVN.
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.
Wenn Sie nur eine Datei ohne Revisionsinformationen benötigen, verwenden Sie
svn export <URL>
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".
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.
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.
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.
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.
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.
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.