web-dev-qa-db-fra.com

Comment supprimer automatiquement tous les fichiers .orig dans l'arbre de travail Mercurial?

Pendant les fusions, Mercurial laisse le fichier .orig pour tout fichier non résolu. Mais après avoir résolu manuellement les problèmes et marqué un fichier correctement, il ne supprime pas le fichier .orig. Peut-il être supprimé automatiquement par une commande?

Je travaille sur un Mac afin de pouvoir utiliser quelque chose comme:

find . -iname '*.orig' -exec rm '{}' ';'

et alias ou quelque chose, mais je préfère utiliser quelque chose comme le nettoyage hg ...

METTRE À JOUR:

Depuis un certain temps maintenant, extension de purge est fourni avec Mercurial et résout bien ce problème.

54
rkj

Personnellement, j'utilise

$ rm **/*.orig

si je me lasse du .orig des dossiers. Cela fonctionne dans Zsh et dans Bash 4 après avoir exécuté shopt -s globstar.

Mais si vous utilisez un autre Shell ou souhaitez une solution intégrée, alors vous aimerez peut-être le extension de purge (lien mis à jour le 2016-08-25). Cela vous permet de supprimer tous les fichiers non suivis avec

$ hg purge

Vous pouvez supprimer tous les fichiers non suivis et ignorés avec

$ hg purge --all

Un avantage d'utiliser hg purge est que cela nettoiera également les répertoires qui deviennent vides après la suppression des fichiers. La ligne de commande rm laissera juste les répertoires vides derrière.

67
Martin Geisler

btw. find l'utilitaire a une action -delete pour que vous puissiez saisir uniquement:

find <path-to-files> -name '*.orig' -delete

31
vectoroc

Si vous souhaitez simplement supprimer les fichiers .orig et que vous vous trouvez sur un ordinateur Windows, les éléments suivants semblent bien fonctionner:

D:\workspace>hg purge -I **/*.orig --all

Cela supprimera tous les fichiers non suivis qui se terminent par .orig, mais ne supprimera pas autre fichiers non suivis, comme le feraient les autres réponses.

Vous pouvez tester cela avant de l'exécuter en mettant le --print drapeau également.

13
mlissner

Ce qui suit supprimera les fichiers .orig dans toute votre hiérarchie de copie de travail et fonctionnera également pour les chemins contenant des espaces:

find . -name *.orig | while read -d $'\n' file; do rm -v "$file"; done;

J'utilise un alias dans mon .bash_profile:

alias clearorig='echo "Removing .orig files..."; find . -name *.orig | \
while read -d $'\''\n'\'' file; do rm -v "$file"; done;'
4
mccrappy

J'ai posté cette réponse avant . Mais c'est le bon endroit pour cette réponse.

J'ai fait ce fichier batch moi-même.

IF "%1%" == "d" (
    del /s *.orig
    del /s *.rej
 ) ELSE ( 
    del /s /p *.rej
    del /s /p *.orig
 )

Aide: Enregistrez ce contenu sous orig.bat

  1. Exécutez orig d pour supprimer tous les fichiers rejetés et orig à la fois sans confirmation
  2. Exécutez orig pour supprimer les fichiers avec confirmation [Mécanisme de sécurité]

J'espère que cela vous sera utile.

1
mahe madhi

Je travaille à Powershell et je n'ai pas vu la réponse ici:

# 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 ;
1
sonjz

vous devez utiliser le crochet de mise à jour

update: Ceci est exécuté après une mise à jour ou fusion du répertoire de travail terminée

1
dfa

J'utilise personnellement ce qui suit à la racine du dépôt:

hg purge -p -I **/*.orig | xargs rm -f

C'est un peu mieux que d'utiliser simplement "hg purge" ou "hg purge --all" car vous pouvez filtrer les types de fichiers spécifiques que vous souhaitez inclure.

Pour une explication:

  • L'argument -p affiche la liste des fichiers à purger
  • La liste blanche de l'argument -I filtre les fichiers à inclure
  • La liste résultante est redirigée vers xargs et exécutée à l'aide de la commande rm -f
1
Gary

Ce n'est pas un moyen automatique de supprimer des fichiers supplémentaires, mais c'est assez simple pour s'exécuter manuellement.

Le hg st peut afficher des fichiers inconnus ou non suivis . Vous pouvez utiliser cette sortie comme argument de la commande system rm. Voici un exemple réel que je viens de réaliser:

$ # 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`

Si vous avez laissé des répertoires vides, le -r et -d les drapeaux pour rm peuvent aider.

En tant que bonus, hg status --ignored pourrait être utilisé pour nettoyer tous ces fichiers temporaires ignorés ainsi que pour échanger des fichiers de votre éditeur (par exemple, Vim).

0
Clint Pachl

Une commande que j'utilise sous Linux pour nettoyer, évite d'avoir à faire une nouvelle recherche avec find.

Ceux-ci doivent être exécutés à partir du répertoire racine du projet Mercurial

hg status | grep ".orig" | cut -d ' ' -f 2- | xargs rm -f

Ou si vous souhaitez effacer tous les fichiers inconnus.

hg status | cut -d ' ' -f 2- | xargs rm -f

0
toddles_fp