Mercurial (hg) ne valide que certains fichiers

119

J'essaye de ne valider que certains fichiers avec Mercurial. En raison de l'ajout automatique de hg chaque fois que j'essaie de valider un changement, il souhaite valider tous les fichiers. Mais je ne veux pas de ça car certains fichiers ne sont pas encore "prêts".

Il y a

hg commit -I thefile.foo

mais ce n'est que pour un fichier. La meilleure façon pour moi serait de désactiver l'ajout automatique comme dans Git. Est-ce possible?

Praveen Kumar Purushothaman
la source
5
utiliser l'extension d'enregistrement? ou vous pouvez spécifier des fichiers sur la ligne de commandehg ci foo bar baz
tonfa
4
@tonfa, republiez votre commentaire en tant que réponse
Andrei Dziahel
Veuillez ne pas vandaliser vos messages.
Glorfindel
Pourquoi vandalisez-vous un mec si gentil?
Praveen Kumar Purushothaman

Réponses:

155

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

$ hg commit foo.c foo.h dir/

Cela fonctionne et c'est ce que je fais tout le temps. Vous pouvez également utiliser l' --includeindicateur que vous avez trouvé, et vous pouvez l'utiliser plusieurs fois comme ceci:

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

Vous pouvez même utiliser un ensemble de fichiers pour sélectionner les fichiers que vous souhaitez engager:

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

Il n'y a aucun paramètre qui désactivera le comportement d'ajout automatique et fera fonctionner Mercurial comme le fait Git. Cependant, l' extension mq pourrait être intéressante. 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

Je n'utilise pas vraiment MQ à cette fin moi-même, car je pense qu'il suffit de spécifier les noms de fichiers sur la ligne de commande.

Martin Geisler
la source
Quel comportement de "comportement d'ajout automatique"? Hg avait-il l'habitude d'ajouter automatiquement des fichiers? Parce que maintenant, vous devez le faire explicitement ou ils ne seront pas suivis.
mpen
1
@mpen Je pense qu'il veut dire comment gh ajoute automatiquement chaque fichier modifié à un commit, contrairement à git dans lequel vous devez ajouter manuellement des fichiers modifiés au prochain commit, et peut laisser certains fichiers modifiés non
validés
24

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

Si vous souhaitez valider de nombreux fichiers et exclure seulement quelques fichiers, l'utilisation -Xest plus pratique.

Par exemple, étant donné un référentiel contenant "file_1", "file_2" et "file_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
Rob W
la source
8

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

Voici un exemple de ce à quoi ressemble l'interface. Notez que c'est une vieille capture d'écran (de crecord en fait) donc l'interface a légèrement changé (mais les bases sont les mêmes). Capture d'écran de crecord

Remarque pour obtenir cette interface, vous devez activer l'interface curses. Vous pouvez le faire pour une seule exécution avec hg commit --config ui.interface=curses --interactiveou généralement en ajoutant les éléments suivants à votre .hgrc:

[ui]
interface = curses
studgeek
la source