2009-12-18 7 views
8

Bis vor kurzem haben wir SVN für alle Projekte unseres Webstudios verwendet, und es gibt eine sehr praktische Funktion in verschiedenen Clients wie Subversive und TortoiseSVN, die alle Dateien extrahieren können, die in einer bestimmten Revision geändert wurden.Wie kann ich alle geänderten Dateien eines Changesets in Mercurial extrahieren?

Gibt es eine Möglichkeit, dies in Mercurial zu tun? Es ist mir egal, ob es über eine GUI oder eine Befehlszeile erfolgt, es ist einfach sehr praktisch, eine Reihe von Dateien zu haben, die in einer bestimmten Änderungsmenge geändert wurden.

P.S. Ich muss es beim ersten Mal falsch gemacht haben. Ich brauche mehr als nur eine Liste von Dateien, es wäre großartig, wenn alle Dateien in einen anderen Ordner exportiert würden.

+0

Meinst du den Dateinamen oder Inhalt oder Diff der Dateien? –

Antwort

11

Aufbauend auf Jerome Antwort dies wird Ihnen die Kopien der Dateien erhalten, die 4 in Revision geändert:

hg archive --type files --rev 4 -I $(hg log -r 4 --template {files} | sed 's//-I /g') ~/changedfiles 

, dass alle Dateien stellt die benannte changedfiles in Revision vier in ein neu erstelltes Verzeichnis geändert in dein Homedir.

Wenn Sie es ändern:

hg archive --type zip --rev 4 -I $(hg log -r 4 --template {files} | sed 's//-I /g') ~/changedfiles.zip 

dann zeigen sie in einem Zip-Archiv auf.

Es ist erwähnenswert, dass das nur funktioniert, wenn Sie keine Leerzeichen in Dateinamen haben. Wenn Sie diesen Fehler gemacht haben, müssen wir stattdessen hg status --print0 -r revision -r parent-of-revision verwenden, aber das ist hoffentlich nicht nötig.

Beachten Sie auch, dass die Revisionsnummer "4" in unserem Beispiel zweimal angezeigt wird.Das Ganze könnte sehr leicht in ein Shell-Skript eingebunden werden, und das wäre parametrisiert, so dass Sie nicht daran denken müssen, es an beiden Stellen zu ändern.

0

Dieser Befehl gibt Namen aller geänderten Dateien in einer bestimmten Revision:

hg export revision_num | grep ^diff | cut -f 6 -d ' ' 
+0

Das ist fast, was ich brauche! Ich muss nur irgendwie das Ergebnis an cp übergeben und alle Dateien in einen separaten Ordner kopieren. Vielen Dank! –

1

auf ned Je gibt es zwei Befehl:

  1. die Änderungen mit einer bestimmten Revision verbunden zu bekommen

    hg export -r 23 
    
: Sie können hg export verwenden 0

Dies wird ein diff aller Änderungen (eigentlich eine formatierte Patch, bereit) aufzubringenden

    erzeugen
  1. den Namen erhalten alle Dateien, die betroffen waren, können Sie hg log verwenden:

    hg log -r 23 -v 
    

Dies wird die Meta-Informationen für die Revision, zusammen mit den Namen der Dateien drucken, die betroffen waren.

+0

könnte man natürlich auch hg diff -r rev -r rev-1, das wäre das gleiche wie der diff-Teil des Exports –

+1

@jk, 'hg export' ist besser als' hg diff', da es den Schritt des Findens eliminiert der Eltern-Änderungssatz, der nicht immer dekremental ist (z. B. werden die Nummern mit Zusammenführungen und dergleichen vermischt). – notnoop

+2

@notnoop, Sie können 'hg diff -c' dafür verwenden :) – tonfa

7

Diese Sie die Liste der geänderten Dateien in Revision gibt 4:

hg log -r 4 --template {files} 

Update: Wenn Sie pro Zeile eine Datei haben möchten, können Sie the style described in Hg book verwenden.

Verwandte Themen