Subversion: Schauen Sie sich nur die von einem bestimmten Commit betroffenen Dateien an

StackOverflow https://stackoverflow.com/questions/971188

  •  13-09-2019
  •  | 
  •  

Frage

In Subversion ist es möglich, sich zu überprüfen nur Diese während eines bestimmten Commits betroffenen Dateien, sofern Sie die spezifische Revisionsnummer kennen?

War es hilfreich?

Lösung

Ich denke, dass eine Subversion Check -out nur einen bestimmten Ordner und keine einzelnen Dateien überprüfen kann. Das heißt, der Befehl:

svn log -r *revision* -q -v

Listet die mit der angegebenen Revision verbundenen Änderungen auf, damit Sie die Ausgabe dieses Befehls verarbeiten können, um die gewünschten Dateien nach dem Überprüfen eines Arbeitsordners für das vollständige Verzeichnis auf irgendwo zu kopieren.

Andere Tipps

Sie können eine Liste von Dateien erhalten, die seit einer bestimmten Revision wie folgt geändert werden:

svn diff -r [REVNUM]:HEAD --summarize > fileschanged.txt

Erstellen Sie dann ein Skript, um jede Datei in der Datei -schanked.txt zu überprüfen

Ich denke, es ist möglich, dass Sie den Begriff "Check out" hier im CVS -Sinne verwenden, dh ein "SVN -Update". Ist das richtig?

Wenn ja, können Sie die gewünschte Überarbeitung aktualisieren:

svn update -r12345

oder sogar nur diese Dateien zu dieser Revision:

svn update -r12345 file1 file2 file3

Sie müssen jedoch die Liste der Dateien von SVN unter Verwendung einiger anderer Vorschläge erhalten.

Ich weiß, dass es etwas abseits ist, aber ich verwende Trac, um dies zu tun, und es exportiert nur die Dateien, die zwischen 2 Revisionen als ZIP -Archiv mit den Dateien in ihrer ursprünglichen Verzeichnisstruktur geändert werden.

svn checkout Funktioniert nur auf Verzeichnisebene, nicht auf der Dateiebene. Wenn alle Änderungen in einem bestimmten Änderungssatz aus demselben Verzeichnis stammen, können Sie die ausführen svn checkout <url> <path> -r<revid>.

Sie können die Liste der betroffenen Dateien verwenden svn log -q -v -r123 url.

Wenn Sie wirklich nur die betroffenen Dateien erhalten möchten, die Sie verwenden können svn cat urlToFile -r123 > myfile Für jede Datei.

Wenn Sie eine aktuelle Version von SVN verwenden, können Sie einen leeren Ordner auschecken und dann die spezifischen Dateien aktualisieren.

Nachdem Ihre Liste der Dateien ausgewählt wurde,

svn co --depth=empty url dest
cd dest
svn up file1 file2 file3

Bearbeiten: Ziemlich die gleiche Lösung wie die akzeptierte Antwort hier: Checkout einer Datei aus Subversion

Hier ist eine Möglichkeit, es zu tun.

svn co -Depth leer SVN: // MyRepository/MyTrunk

CD MyTrunk

svn diff -c [revnum] svn: // myrepository/mytrunk | Grep "Index:" | awk '{print $ 2}' | Xargs -n 1 SVN -Update -Parenten

Die Ausgabe des awk-Ein-Liners ist eine Liste von Dateien, die mit relativen Pfaden geändert wurden. Wie bereits erwähnt, funktioniert das Update auf einzelnen Dateien, während die Checkout auf Modulen funktioniert. Die Option "-Parenten" erzwingt die Erstellung von Verzeichnissen in Ihrer Arbeitskopie nach Bedarf.

Beachten Sie, dass Update auch eine Option "-Changelist" (zumindest in V.1.7.1+) hat, aber es schien nicht das zu tun, was ich wollte.

Ich brauchte eine Entpassung aller Dateien, die sich in einem Bereich von einem Dutzend Überarbeitungen geändert hatten. Ich habe es so gemacht (diese Befehle sind vielleicht nicht perfekt, dies ist nur eine allgemeine Erklärung):

Erstellen Sie einen Diff, der die benötigten Dateien anzeigt, und schreiben Sie die Liste in eine Textdatei

svn diff --summarize -r219:232 > r219-232_Summary.txt

Dadurch erhalten Sie eine Textdatei mit Zeilen wie

M      path/to/file.php

Massieren Sie das Dateiformat, um den Beginn jeder Zeile durch einen Befehl "svn up" anstelle von "a" oder "m" oder was auch immer zu ersetzen.

 sed -i 's/A      /svn up /g' ./r219-232_Summary.txt

... was dir Zeilen wie wie

svn up path/to/file.php

Erstellen Sie ein neues Verzeichnis und lesen Sie Ihr Projekt dazu

svn co http://www.repo.net/whatever

Entfernen Sie alles im Verzeichnis mit Ausnahme der .svn -Datei (ich verwende einen relativ aktuellen SVN -Client. Wenn Sie also in einem alten SVN -Client sind, der in jedem Verzeichnis einen .svn hat, nicht sicher, wie das funktionieren wird)

rm -rf ./*

Kopieren Sie in Ihre Textdatei, machen Sie sie ausführbar und führen Sie sie als Skript aus.

cp /path/to/wherever/r219-232_Summary.txt ./r219-232_Summary.sh
chmod 777 ./r219-232_Summary.sh
./r219-232_Summary.sh

Wenn alles wie geplant verläuft, sollte Shell jeden Befehl "svn up" in Ihrer Textdatei analysieren und das Verzeichnis nur mit den Dateien füllen, an denen Sie interessiert sind.

Hier ist eine einfache Bash -Skriptversion. Ich habe ein "Suchmuster" verwendet, um unnötige Zeilen zu entfernen. Revision, Repository -Adresse und Zielpfad werden als Argumente angegeben, aber sie könnten hartcodiert werden.

#!/bin/bash

REVISION=${1}
REPOSITORY="${2}"
DEST_PATH="${3}"
SEARCH_PATTERN="trunk"
FILES=$(svn log -q -v  $REPOSITORY -r $REVISION | grep $SEARCH_PATTERN)

mkdir -p $DEST_PATH
for FILE in $FILES ; do
    if [[ $FILE == *"$SEARCH_PATTERN"* ]]
    then
          FOLDER=$(dirname $FILE)
          mkdir -p $DEST_PATH/$FOLDER
      svn export -r $REVISION $REPOSITORY/$FILE $DEST_PATH/$FOLDER
    fi
done

#EOF

Sie können genau die Liste der Dateien in einer bestimmten Änderung mithilfe von Verwendung erhalten

svn log -v -q -r rev

Sie können dann die Markierungen an der Vorderseite der Linie mit einem Rohr wie aufräumen

sed -e "s/^ . / /" | egrep -v "Changed paths:|-----"

. Um nur die Dateien zu erhalten, würden Sie wahrscheinlich verwenden svn cat wie von Nikolai vorgeschlagen.

Bearbeitet, um die SED -Pipeline zu bereinigen und zu vereinfachen.

Es tut mir leid, eine lang tote Frage wiederzubeleben, aber sie wurde nie zu meiner Zufriedenheit beantwortet.

Sie können ein einfaches Werkzeug für Sie mit SVNKit erstellen. ich habe das gefunden Blog darüber, und modifizierte den Code leicht für meine Bedürfnisse. Ich benutze es bis heute in meinem Bereitstellungsprozess.

Es macht einen Export, kein Checkout, aber ich bin sicher, das wäre eine einfache Änderung.

SVN MergeInfo --how-revs förderfähig http: //base.com.rev1 http: //base.com.rev2

Dies wird viele Überarbeitungen geben

Jetzt möchten Sie die Liste der Dateien in jeder Revision sehen. Nehmen Sie also die Liste der Überarbeitung und kopieren Sie in Note Pad oder EditPlus und ändern Sie, damit sie in eine Zeile passen

SVN log -r R33521 -R33762 -3456 -R5623 -q -v >> Missenfiles.txt

Hinweis: Ich hatte 118 Überarbeitungen und konnte nicht die Liste der Dateien korrekt erhalten. Also habe ich den obigen Befehl durchgeführt, indem ich in Untergruppen der Revision eingebrochen bin

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top