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.
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.
btw. find
l'utilitaire a une action -delete
pour que vous puissiez saisir uniquement:
find <path-to-files> -name '*.orig' -delete
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.
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;'
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
orig d
pour supprimer tous les fichiers rejetés et orig à la fois sans confirmationorig
pour supprimer les fichiers avec confirmation [Mécanisme de sécurité]J'espère que cela vous sera utile.
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 ;
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
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:
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).
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