web-dev-qa-db-fra.com

Mercurial (hg) ne valide que certains fichiers

J'essaie de ne valider que certains fichiers avec Mercurial. Parce que hg a ajouté automatiquement chaque fois que j'essaie de valider une modification, il veut valider tous les fichiers. Mais je ne veux pas cela parce que certains fichiers ne sont pas encore "prêts".

Il y a

hg commit -I thefile.foo

mais ce n'est que pour un fichier. Le meilleur moyen pour moi serait de désactiver l’ajout automatique, comme dans Git. Est-ce possible?

116
user287689

Vous pouvez spécifier les fichiers sur la ligne de commande, comme tonfa écrit:

$ hg commit foo.c foo.h dir/

Cela fonctionne et c'est ce que je fais tout le temps. Vous pouvez aussi utiliser le --include drapeau que vous avez trouvé, et vous pouvez l’utiliser plusieurs fois de la manière suivante:

$ hg commit -I foo.c -I "**/*.h"

Vous pouvez même utiliser un fileset pour sélectionner les fichiers que vous voulez valider:

$ hg commit "set:size(1k - 1MB) and not binary()"

Aucun paramètre ne permet de désactiver le comportement d'ajout automatique et de faire fonctionner Mercurial comme le fait Git. Cependant, l'extension mq pourrait présenter un intérêt. C'est une extension avancée, mais elle vous permet de

$ hg qnew feature-x     # create new patch
$ hg qrefresh -s foo.c  # add a file to the current patch
$ hg qrefresh -s bar.c  # add another file to the patch
$ hg qfinish -a         # convert applied patches to normal changesets

Cependant, je n'utilise pas vraiment MQ à cette fin, car je pense qu'il suffit de spécifier les noms de fichier sur la ligne de commande.

149
Martin Geisler

Si vous souhaitez valider quelques fichiers et en exclure de nombreux autres, répertoriez explicitement les fichiers à valider. -I n'est nécessaire que si vous souhaitez utiliser des modèles au lieu de fichiers.

Si vous voulez valider beaucoup de fichiers et n’exclure que quelques fichiers, utilisez -X est plus pratique.

Par exemple. étant donné un référentiel contenant "fichier_1", "fichier_2" et "fichier_3", les éléments suivants sont équivalents, mais ce dernier est plus facile/plus rapide à taper:

hg commit file_1 file_2
hg commit -X file_3
22
Rob W

À partir de la version 3.8, vous pouvez également utiliser hg commit --interactive pour sélectionner les fichiers (avant la version 3.8, vous pouvez utiliser extension de l'enregistrement pour une fonctionnalité similaire). Le --interactive (ou juste -i) flag amènera hg à vous demander les fichiers que vous souhaitez inclure dans la validation. En prime, vous pouvez même inclure/exclure des morceaux dans les fichiers.

Voici un exemple de l'interface. Notez que ceci est une ancienne capture d'écran (de crecord en fait), donc l'interface a légèrement changé (mais les bases sont les mêmes). crecord screenshot

Remarque: pour obtenir cette interface, vous devez activer l'interface curses. Vous pouvez le faire pour un seul passage avec hg commit --config ui.interface=curses --interactive ou généralement en ajoutant ce qui suit à votre .hgrc:

[ui]
interface = curses
6
studgeek

Comme suggéré dans cette question de débordement de pile , le moyen le plus simple de faire ceci est avec hg shelve .

0
Stephen Jennings