Wie entferne ich automatisch alle .orig-Dateien im Mercurial-Arbeitsbaum?
Frage
Während der Zusammenführung hinterlässt Mercurial die .orig-Datei für alle nicht aufgelösten Dateien.Aber nachdem Probleme manuell gelöst und eine Datei als korrekt markiert wurden, wird die .orig-Datei nicht gelöscht.Kann es durch einen Befehl automatisch entfernt werden?
Ich arbeite auf einem Mac und kann daher Folgendes verwenden:
find . -iname '*.orig' -exec rm '{}' ';'
und es mit einem Alias versehen oder so, aber ich würde lieber so etwas wie hg cleanup verwenden ...
AKTUALISIEREN:
Seit einiger Zeit, Purge-Erweiterung ist im Lieferumfang von Mercurial enthalten und löst dieses Problem gut.
Lösung
Ich persönlich verwenden
$ rm **/*.orig
wenn ich müde von den .orig
Dateien. Dies funktioniert in Zsh und in Bash 4, nachdem Sie shopt -s globstar
ausgeführt werden.
Aber wenn Sie eine andere Shell verwenden oder wollen eine integrierte Lösung, dann möglicherweise mögen Sie die Säuberung Erweiterung (Link aktualisiert 2016.08.25). Das können Sie alle untracked Dateien entfernen mit
$ hg purge
Sie können alle untracked und ignoriert Dateien mit
entfernen$ hg purge --all
Ein Vorteil hg purge
zu verwenden, ist, dass dies auch Bereinigungs Verzeichnisse, die Dateien nach dem Entfernen leer werden. Die rm
Befehlszeilen lassen Sie die leeren Verzeichnisse zurück.
Andere Tipps
btw. find
Dienstprogramm hat eine Aktion -delete
so können Sie geben nur:
find <path-to-files> -name '*.orig' -delete
Wenn Sie nur die .orig Dateien löschen möchten, und Sie gerade auf einem Windows-Computer sein, scheint die folgende gut zu funktionieren:
D:\workspace>hg purge -I **/*.orig --all
Damit werden alle untracked Dateien löschen, die in .orig beenden, aber nicht löschen andere untracked Dateien, wie die anderen Antworten würde.
Sie können dies testen, bevor sie, indem sie die --print
Flag in auch ausgeführt wird.
Folgendes entfernt .orig-Dateien in Ihrer gesamten Arbeitskopiehierarchie und funktioniert auch für Pfade, die Leerzeichen enthalten:
find . -name *.orig | while read -d $'\n' file; do rm -v "$file"; done;
Ich verwende einen Alias in meinem .bash_profile:
alias clearorig='echo "Removing .orig files..."; find . -name *.orig | \
while read -d $'\''\n'\'' file; do rm -v "$file"; done;'
sollten Sie den Update Haken
Update: Dies wird nach einem Update ausführen oder fusionieren das Arbeitsverzeichnis beendet
Ich habe diese Antwort vor geschrieben. Aber dies ist der richtige Ort, um diese Antwort.
Ich habe diese Charge selbst einreichen.
IF "%1%" == "d" (
del /s *.orig
del /s *.rej
) ELSE (
del /s /p *.rej
del /s /p *.orig
)
Hilfe: Speichern Sie diesen Inhalt als orig.bat
- Ausführen
orig d
alle Spuck löschen und orig Dateien auf einmal ohne Bestätigung - Ausführen
orig
, um das Löschen von Dateien mit der Bestätigung [Sicherheitsmechanismus]
Hope dies hilfreich ist.
Ich persönlich benutze die folgenden von der Wurzel des Repo:
hg purge -p -I **/*.orig | xargs rm -f
Es ist ein wenig besser als die Verwendung von nur ‚hg Säuberung‘ oder ‚hg Säuberung --alle‘, weil Sie die bestimmte Dateitypen herausfiltern können Sie aufnehmen möchten.
Für eine Erklärung:
- Das Argument -p druckt die Liste der Dateien gelöscht werden
- Das Argument -I Weiße Liste filtert die Dateien schließen
- Die resultierende Liste wird xargs geleitet und mit dem rm -f Befehl ausgeführt
Ich bin in Powershell arbeiten und nicht die Antwort sehen hier:
# NOTE: be in the root of your repository
# fetch all .orig files recursively
$orig = (dir *.orig -recurse) ;
# remove each .orig file
foreach ($item in $orig) { del $($item.FullName) ; }
# afterwards I make sure to remove the references to the .orig files in the repo
# then commit & push
hg addremove ;
hg commit -m "remove .orig" ;
hg push ;
Dies ist keine automatische Möglichkeit, um zusätzliche Dateien zu entfernen, aber es ist einfach genug, um von Hand ausgeführt werden.
Die hg st
zeigen unbekannt oder nicht verfolgt Dateien. Sie können diese Ausgabe als Argument an das System rm
Befehl verwenden. Hier ist ein konkretes Beispiel ich gerade durchgeführt:
$ # SHOW ONLY THE CRUFT
$ hg status --unknown
? config/settings.rb.orig
? lib/helpers.rb.orig
? routes/main.rb.orig
$ # THE CRUFT WITHOUT THE "?" PREFIX
$ hg status --unknown --no-status
config/settings.rb.orig
lib/helpers.rb.orig
routes/main.rb.orig
$ # SAFELY REMOVE ALL CRUFT
$ rm -- `hg st -un`
Wenn Sie leere Verzeichnisse hinter sich gelassen, die -r
und -d
Flaggen für rm
helfen könnte.
Als Bonus , hg status --ignored
zur Reinigung verwendet werden könnten all diese ignoriert temporäre Dateien sowie Auslagerungsdateien von Ihrem Editor (zum Beispiel Vim).
Ein Befehl, den ich unter Linux verwende zur Reinigung, spart die Notwendigkeit, eine neue Suche mit Fund zu tun.
Diese müssen aus dem Stammverzeichnis des Mercurial-Projekt ausgeführt werden
hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f
Oder wenn Sie alle unbekannten Dateien löschen.
hg status | cut -d ' ' -f 2- | xargs rm -f
Ich mag es nicht die gewählte Antwort. Es ist nicht alles in allen Ebenen des Projekts entfernt. Ich benutze diese:
for f in `find . | grep .orig$`; do rm "$f"; done
Funktioniert auf Mac und * nichts