38 votes

Mercurial peut-il utiliser .hgignore pour oublier des fichiers ?

J'ai oublié de placer le bon .hgignore dans mon projet et je suis maintenant confronté à de nombreux fichiers inutiles dans mon référentiel. Comme ces fichiers sont déjà sous contrôle de source, .hgignore ne les prendra pas.

Y a-t-il un moyen pour hg d'oublier tous les fichiers correspondant à .hgignore ?

66voto

Idan K Points 10037

filesets awesomeness (nécessite la version 1.9) :

hg forget "set:hgignore() and not ignored()"

1 votes

En effet, c'est exactement ce que je cherchais. Je n'avais jamais entendu parler de filesets auparavant, merci pour le tuyau.

0 votes

Wow, c'était facile (comparé à git). Merci Idan !

0 votes

Cela doit faire partie de mercurial

2voto

VonC Points 414372

Vous devez supprimer ce fichier pour qu'il soit ignoré.

hg remove -Af myfile

(supprimer de la révision tout en laissant une copie sur votre espace de travail : ou hg forget )

Mais votre dépôt Mercurial ne va pas "oublier" ces mêmes fichiers dans les révisions précédentes.

La suppression d'un fichier n'affecte pas son historique.
Il est important de comprendre que la suppression d'un fichier n'a que deux effets.

  • Elle supprime la version actuelle du fichier du répertoire de travail.
  • Cela empêche Mercurial de suivre les modifications apportées au fichier, à partir du moment où le prochain commit est effectué.

La suppression d'un dossier ne modifie en rien l'historique du dossier.


Une autre façon, lorsque vous avez beaucoup de fichiers supplémentaires que vous devez maintenant ignorer est :

  • les supprimer (du système de fichiers, non pas avec une commande hg, mais avec une commande OS 'rm')
  • hg addremove (attention, cela ajoutera les fichiers actuellement non-commissionnés, mais cela va hg remove tous les autres fichiers que vous venez de rmettre)

Voir Comment oublier tous les fichiers supprimés avec Mercurial pour plus.

0 votes

Oui, je sais que je peux le faire manuellement, mais je veux appliquer les motifs .hgingore à nouveau sur mes fichiers pour oublier tous les fichiers qui correspondent. Il y a plusieurs centaines de dossiers CVS et de classes dont je veux me débarrasser.

0 votes

@OlivierS : Je comprends. J'ai mis à jour ma réponse pour mieux répondre à votre cas.

1voto

Geoffrey Zheng Points 3503

Je ne pense pas que HG puisse le faire en dehors de la boîte.

Les entrées de hgignore sont des regexp ou des glob, donc vous pouvez simplement parcourir les entrées et trouver les fichiers/dossiers correspondants et faire "hg remove" sur eux.

Pour l'analyse/la correspondance de hgignore, si vous utilisez python, vous pouvez simplement appeler les fonctions dans ignore.py de hg.

Peut-être que quelqu'un peut écrire une extension pour cela.

0 votes

Je suis arrivé à la même conclusion et j'ai essayé, mais seulement pendant 20 minutes. Pas encore de succès mais j'ai trouvé les appels importants dans la classe dirstate. L'API hg manque de documentation.

1 votes

Ils l'ont délibérément fait, semble-t-il, probablement parce que les choses changent trop vite : "L'API Mercurial est destinée principalement à un usage interne et à la création d'extensions et est susceptible d'être modifiée à tout moment" (de mercurial.selenic.com/wiki/MercurialApi ). Le code hg est assez propre une fois que vous vous y êtes habitué.

0 votes

for /f "delims=" %i in ('dir bin /ad/s/b') do hg forget %i/ . Voir ma réponse

0voto

iSid Points 4063

Voici ce que j'ai fait pour chacun des répertoires mentionnés dans .hgignore

for /f "delims=" %i in ('dir bin /ad/s/b') do hg forget %i/

Et pour les fichiers

for /f "delims=" %i in ('dir *.user /s/b') do hg forget %i

CLAUSE DE NON-RESPONSABILITÉ :
Je ne sais pas si cela fonctionnera sur les systèmes d'exploitation non Windows ou non.

0voto

Ruud Lenders Points 674

La solution d'Idan K est excellente. J'ai ajouté un alias à mon mercurial.ini global car je ne me souviens pas de la commande.

[alias]
forgetignored = forget "set:hgignore() and not ignored()"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X