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

StackOverflow https://stackoverflow.com/questions/1067680

  •  21-08-2019
  •  | 
  •  

Question

Au cours se confond le fichier de feuilles mercuriels pour tout fichier non résolu. Mais après avoir résolu les problèmes manuellement et marquer un fichier correct, il ne supprime pas le fichier .orig. Peut-il être automatiquement supprimé par une commande?

Je travaille sur un Mac, je peux 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 ...

Mise à jour:

Depuis un certain temps, Purger l'extension est livré avec Mercurial et résout ce problème bien.

Était-ce utile?

La solution

Personnellement, j'utilise

$ rm **/*.orig

si je suis fatigué des fichiers .orig. Cela fonctionne dans zsh et Bash 4 après avoir exécuté shopt -s globstar.

Mais si vous utilisez un autre shell ou si vous voulez une solution intégrée, alors peut-être vous aimerez le extension de purge (lien mis à jour 25.08.2016). Cela vous permet de supprimer tous les fichiers avec trassez

$ hg purge

Vous pouvez supprimer tous les fichiers et trassez avec ignorés

$ hg purge --all

L'avantage d'utiliser est que ce hg purge sera aussi répertoires nettoyage qui sont vides après la suppression des fichiers. La ligne de commande va simplement laisser rm les répertoires vides derrière.

Autres conseils

BTW. find utilitaire a une action -delete de sorte que vous pouvez taper seulement:

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

Si vous voulez simplement supprimer les fichiers .orig, et que vous soyez sur un ordinateur Windows, ce qui suit semble bien fonctionner:

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

Ceci supprimera tous les fichiers qui se terminent par trassez .orig, mais ne supprimera pas autres fichiers non suivis, comme les autres réponses seraient.

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

La suivante supprime .orig fichiers dans votre hiérarchie entière de copie de travail et travaille é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;'

vous devez utiliser le crochet de mise à jour

  

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

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

Je l'ai fait moi-même lot fichier.

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

Aide: Enregistrer ce contenu orig.bat

  1. Exécuter orig d pour supprimer tous les rejets et orig fichiers à la fois, sans confirmation
  2. Exécuter orig pour supprimer des fichiers avec confirmation [mécanisme de sécurité]

Espérons que cela est utile.

J'utilise personnellement ce qui suit de la racine du repo:

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

Il est un peu mieux que d'utiliser « purge hg » ou « hg purge --all » parce que vous pouvez filtrer les types de fichiers que vous souhaitez inclure.

Pour une explication:

  • L'argument -p imprime la liste des fichiers à purger
  • Le whitelist argument -I filtre les fichiers à inclure
  • La liste résultante est canalisée à xargs et exécuté en utilisant la commande rm -f

Je travaille dans Powershell et n'a 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 ;

Ce n'est pas un moyen automatique de suppression de fichiers supplémentaires, mais il est assez simple à exécuter manuellement.

Les hg st peuvent montrer inconnu ou pas suivis fichiers . Vous pouvez utiliser cette sortie comme argument à la commande du système. Voici un exemple concret que je viens d'effectuer:

$ # 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 des répertoires vides laissés pour compte, les drapeaux rm et pour -r pourraient aider -d.

prime , pourrait être utilisé hg status --ignored pour le nettoyage de tous les fichiers temporaires ignorés ainsi que les fichiers d'échange de votre éditeur (par exemple, VIM).

Une commande que j'utilise sur Linux pour le nettoyage, permet d'économiser la nécessité de faire une recherche avec find frais.

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

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

Ou si vous voulez effacer tous les fichiers inconnus.

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

Je n'aime pas la réponse choisie. Il n'a pas tout enlevé à tous les niveaux du projet. J'utilise ceci:

for f in `find . | grep .orig$`; do rm "$f"; done

Fonctionne sur Mac et * nix

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top