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.

War es hilfreich?

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

  1. Ausführen orig d alle Spuck löschen und orig Dateien auf einmal ohne Bestätigung
  2. 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

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