Mercurial - alle Dateien, die sich in einem Änderungssatz geändert haben?

97

Wie können Sie alle Dateien ermitteln, die sich in einem bestimmten Änderungssatz geändert haben?

Ich suche in diesem Fall keinen Unterschied, nur eine Liste von Hinzufügen / Entfernen / Ändern.

hg log -vprX macht eine Liste von Unterschieden, aber ich möchte nur die Dateien.

Marcus Leon
quelle
Mögliches Duplikat der Untersuchung eines einzelnen Änderungssatzes in Mercurial
Michał Wróbel

Antworten:

149

Wenn Sie nur Dateien auflisten möchten, die sich geändert haben, sollten Sie den "Statusbefehl" verwenden. Im Folgenden werden die Änderungen an Dateien in Revision REV aufgelistet

hg status --change REV
pyfunc
quelle
13
+1, aber das OP möchte wahrscheinlich auch das Flag -n/ --no-status.
Niall C.
7
Zum einfachen Kopieren:hg status --no-status --change REV
Zastrowm
+1 Das ist so viel einfacher zu tippen als hg status --rev REV~1:REVfrüher.
Patrick Oscity
3
verwenden '.' für aktuelle REV. Bedeutung -hg status --change .
zaxy78
16

Entfernen pSie einfach aus Ihrem hg log -vprTestament die Liste der Dateien. -pbedeutet show patch. Sie können auch eine Vorlage verwenden, um die Ausgabe nach Ihrem Geschmack zu formatieren.

Geoffrey Zheng
quelle
3
Ich denke, Sie benötigen die folgende Vorlage: - Vorlage 'Dateien: {Dateien} \ n'
Ton Plomp
1
Ich glaube, die {Dateien} ist Teil der Standardvorlage -v Flag
eskhool
2
hg log -r. - Vorlage '{join (files, "\ n")}', um die Dateien in einer
neuen
1
@ Foxichu Kommentar hat bei mir funktioniert, war aber irgendwie hacky. hg status --change .
Tatsächlich
13

Ich weiß, dass die Frage für einen einzelnen Änderungssatz gilt, aber wenn Sie alle Dateien für eine Reihe von Änderungssätzen ändern möchten, können Sie dies tun

hg status --rev 1 --rev 10 -m
Nick DeVore
quelle
2
Schrecklich schlecht. Dateien, deren Reichweite geändert wurde, sind hg log -r BEGIN:END --template "{files}\n"wie @ geoffrey-zheng und @ton vor zwei Jahren geschrieben haben !!!
Lazy Badger
Das tut mir leid. Angenommen, ihre Antwort war für den einzelnen Änderungssatz.
Nick DeVore
1
Meiner Meinung nach ist diese Antwort nicht so schrecklich. hg status --rev BEGIN --rev ENDist: 1. viel leichter zu merken als hg log -r BEGIN:END --template "{files}\n"; 2. Es druckt die Dateien in separaten Zeilen ohne Verwendung von sed(@Eric Lawler) oder join()(@Foxichu). 3. Ohne das -mFlag werden nicht nur geänderte, sondern auch hinzugefügte und entfernte Dateien angezeigt (auch hier gilt die schöne Standardfarbe). 4. Es gibt -aund -rFlags, die unterschiedliche Filterung ermöglichen. 5. Wenn man das Statuspräfix nicht möchte, gibt es eine -nOption, die es unterdrückt.
Michał Wróbel
9

Aktuelle festgeschriebene Revision

hg status --change .

.ist eine Abkürzung für die aktuelle Version, genau wie @HEADin Git

Aktuelle nicht festgeschriebene Revision

hg status

Willkürlich begangene Revision

hg status --change REV_ID
Gibolt
quelle
1
einfachste und genaueste Antwort!
Zaxy78
2

Fand diese Frage durch Googeln für ein ähnliches Konzept. So zeigen Sie alle Dateien an, die sich durch eine Reihe von Änderungssätzen geändert haben :

hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n" | sed -e 's/ /\n/g' | sort -d | uniq
  1. hg log -r [start rev]:[end rev] --template "{file_mods}{file_adds}\n"zeigt Ihnen eine Liste jeder Datei, die in jedem Änderungssatz geändert oder hinzugefügt wurde, von [Start rev] bis [Ende rev], wobei die Dateien jedes Änderungssatzes in einer neuen Zeile stehen. Wechseln Sie {file_mods}{file_adds}mit {files}, um alle geänderten, hinzugefügten oder entfernten Dateien anzuzeigen.
  2. sed -e 's/ /\n/g' teilt alle Dateien auf, um sie in separaten Zeilen und anzuzeigen
  3. sort wird die Liste für Sie sortieren, damit wir die Liste mit uniq filtern können
  4. uniq filtert die Liste, um Duplikate zu entfernen - Dateien, die in mehr als einer Revision geändert wurden.
Eric L.
quelle
Diese Lösung klebt die zuletzt geänderte mit der ersten hinzugefügten Datei zusammen. Außerdem werden Leerzeichen in Dateinamen nicht richtig behandelt. Eine --templateLösung auf join()Basis dieser Mängel könnte unter Verwendung der von @Foxichu vorgeschlagenen Lösung konstruiert werden .
Michał Wróbel
1

Ich weiß, dass diese Frage eine alte Frage ist und ich bin überrascht, dass niemand gerade modifiziertes Codeformular OP angeboten hat. Ich habe eine Liste von geänderten / hinzugefügten / entfernten Dateien (nicht beschriftet, welche ist welche) durch einfaches Ausführen erhalten hg log -v. Oder was ich eigentlich brauchte hg log -v -l5, um Dateien zu sehen, die in den letzten 5 Commits geändert / hinzugefügt / entfernt wurden (einschließlich derjenigen, die ich noch nicht zum Repo gepusht habe).

Đorđe Relić
quelle
"Niemand hat gerade das modifizierte Codeformular OP angeboten" - @Geoffrey Zheng hat genau das ~ 1 Stunde nach dem Absenden der Frage getan
Michał Wróbel
-2

Wenn Sie wie die meisten Geschäfte sind, verwenden Sie ein Ticketingsystem, um Änderungen zu verfolgen. Wenn Sie die Ticketnummer kennen und alle mit diesem Ticket verknüpften Commits finden möchten (vorausgesetzt, Sie geben die Ticketnummer in die Commit-Nachricht ein), können Sie Folgendes verwenden:

hg log -k TICKET_NUMBER

Hier werden alle mit dem Ticket verknüpften Revisionen angezeigt. Die Dateien werden jedoch nicht aufgelistet. Sie können eine der obigen Antworten verwenden, um dann die Liste der mit den Revisionen verknüpften Dateien abzurufen.

Um es jedoch einfacher zu machen, indem Sie die Informationen aus den vorherigen Antworten kombinieren, können Sie wie folgt nach Commits suchen, einschließlich geänderter Dateien:

hg log -vk TICKET_NUMBER
iDimensionz
quelle
Dies hängt mit der Frage zusammen. Auf dem Poster wurde gefragt, wie Dateien in einem Änderungssatz abgerufen werden sollen. Änderungssätze beziehen sich häufig auf Tickets. Meine Lösung zeigt, wie Dateien abgerufen werden, die sich auf die mit einem Ticket verknüpften Änderungssätze beziehen.
iDimensionz