Ich habe ein persönliches Mercurial-Repository, das einige Änderungen verfolgt, an denen ich gerade arbeite. Ich möchte diese Änderungen mit einem Mitarbeiter teilen, aber sie haben Mercurial nicht bekommen, und ich muss den gesamten Dateisatz senden, und der Kollaborateur wird an ihrem Ende zusammengeführt. Ich suche nach einer Möglichkeit, die "Tipp" -Version der Teilmenge von Dateien zu extrahieren, die zwischen zwei Revisionsnummern geändert wurden. Gibt es eine Möglichkeit, dies leicht in Mercurial zu tun?
Hinzufügen einer Prämie - Das ist immer noch ein Schmerz für uns. Wir arbeiten oft mit internen "Kunden", die unsere Quellcode-Releases als .zip-Datei verwenden, und das Testen eines kleinen Fixes ist einfacher als .zip-Overlay als Patch zu verteilen (da wir den Status ihrer Dateien oft nicht kennen ).
Der beste Fall ist, diese Leute unter Druck zu setzen, um Mercurial zu bekommen, aber abgesehen davon ist ein Patch wahrscheinlich besser als ein komprimierter Satz von Dateien, da der Patch Löschungen und Umbenennungen verfolgt. Wenn Sie immer noch eine Zip-Datei haben wollen, habe ich ein kurzes Skript geschrieben, das eine Zip-Datei erstellt:
%Vor% Die Verwendung wäre nameofscript.py fromrevision torevision destination. Z. B. nameofscript.py 45 51 c:\updates.zip
Tut mir leid wegen der schlechten Befehlszeilenschnittstelle, aber hey, das Skript hat nur 25 Minuten zum Schreiben gebraucht.
Hinweis: Dies sollte von einem Arbeitsverzeichnis in einem Repository ausgeführt werden.
Nun. hg export $base:tip > patch.diff
erzeugt eine Standard-Patch-Datei, die von den meisten Tools gelesen werden kann.
Insbesondere kann der Befehl GNU patch
den gesamten Patch auf die vorherigen Dateien anwenden. Ist es nicht genug? Ich verstehe nicht, warum Sie die Dateien brauchen: Für mich ist es einfacher, einen Patch anzuwenden, als Dateien aus einer Zip-Datei zu extrahieren und sie an die richtige Stelle zu kopieren. Plus , wenn Ihr Mitarbeiter lokale Änderungen hat, überschreiben Sie diese. Sie verwenden kein Tool zur Versionssteuerung, um die andere Person zu zwingen, manuell die Änderungen zusammenzuführen, oder? Lassen Sie patch
damit klar kommen:)
Ich habe auch eine Erweiterung beigetragen, siehe die Erweiterung hgexportfiles auf bitbucket für weitere Informationen. Die Exportdateierweiterung funktioniert für einen bestimmten Revisions- oder Revisionsbereich und erstellt den Satz geänderter Dateien in einem angegebenen Verzeichnis. Es ist einfach, das Verzeichnis als Teil eines Skripts zu komprimieren.
Nach meinem Wissen gibt es dafür kein praktisches Werkzeug (obwohl ein mercurial-Plugin machbar sein könnte). Sie können einen Patch für die Dateigruppe exportieren, indem Sie hg export from:to
verwenden (wo von und Revisionen zu identifizieren.) Wenn Sie wirklich die gesamten Dateien benötigen, wie auf Tipp gesehen, könnten Sie wahrscheinlich etwas zusammen auf der Grundlage der Ausgabe von hg diff --stat -r from:to
, die eine Liste von Dateien mit Anmerkungen darüber ausgibt, wie viele Zeilen geändert wurden, wie:
Wenn keine Ihrer Dateien Leerzeichen oder Sonderzeichen in ihren Namen enthält, könnten Sie etwas wie:
verwenden %Vor%Ich lasse den Umgang mit Sonderzeichen als Übung für den Leser;)
Hier ist ein kleines und hässliches Bash-Skript, das die Aufgabe erledigt, zumindest wenn Sie in einer Linux-Umgebung arbeiten. Dies hat absolut keine Überprüfungen was auch immer und wird wahrscheinlich brechen, wenn Sie eine Datei verschoben haben, aber es ist ein Anfang.
Befehl:
%Vor%Code:
%Vor%Ich weiß, dass du schon ein paar Antworten auf dieses Thema hast, aber ein Freund von mir hatte ein ähnliches Problem und ich habe ein einfaches Programm in VB.Net erstellt, um dies für ihn zu tun, vielleicht könnte es dir auch helfen, das Prog und ein Die Kopie der Quelle befindet sich am Ende des unten verlinkten Artikels.
Obwohl Sie im Moment keine Endrevision auswählen können, wäre es sehr einfach, dies bei der Verwendung der Quelle hinzuzufügen. Allerdings müssten Sie vor dem Extrahieren der Dateien manuell auf die Zielversion aktualisieren. Bei Bedarf könntest du sogar die ZIP-Datei anstelle eines Ordners mit Dateien erstellen (was auch schön ist und leicht manuell gezippt werden kann)
Ich hoffe, dies hilft Ihnen oder anderen, die diese Funktionalität wünschen.
Ich bin kürzlich auf dieses Problem gestoßen. Meine Lösung:
%Vor% Dadurch werden alle verfolgten Dateien gelöscht, die zwischen diesen beiden Revisionen nicht geändert wurden. Sie müssen jedoch alle nicht verfolgten Dateien selbst entfernen. Danach befindet sich der lokale Zweig in einem inkonsistenten Zustand; Sie können dies beheben, indem Sie hg debugrebuildstate
ausführen (oder einfach den lokalen Zweig löschen, wenn Sie ihn nicht mehr benötigen).