Comment faire pour supprimer automatiquement tous les fichiers .orig dans l'arbre de travail Mercurial?
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.
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
- Exécuter
orig d
pour supprimer tous les rejets et orig fichiers à la fois, sans confirmation - 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