Je ne pense pas que des changements non engagés soient intrinsèquement une mauvaise chose. Vous faites référence à une "incapacité à fusionner avec eux" - si vous avez une modification non validée dans un fichier et que vous extrayez et mettez à jour une modification dans ce fichier, Mercurial démarrera le processus de fusion comme si vous l'aviez validé, puis demandé une fusion. Voulez-vous dire quelque chose de différent?
Ainsi, pour les modifications locales que vous ne souhaitez pas encore partager avec d'autres développeurs, vous avez deux approches. La première consiste à conserver les modifications dans votre copie de travail, mais pas à les pousser, et l'autre consiste à les mettre de côté, hors de la copie de travail. Le choix dépend de si vous souhaitez que ces modifications soient disponibles pendant que vous travaillez.
Si vous les conservez dans la copie de travail, les modifications entrantes fonctionneront correctement, il vous suffit donc d'éviter de créer des modifications sortantes, ce qui signifie éviter de les valider. Si les fichiers sont nouveaux, c'est facile - ne les faites pas hg add
. S'ils sont déjà suivis, vous pouvez les exclure spécifiquement des validations avec hg commit --exclude foo.txt
. Si vous avez un grand nombre de fichiers à exclure, ou si vous allez les exclure de nombreuses validations (par exemple pour une modification permanente d'un fichier de configuration local), regardez l' extension exclude .
Si vous êtes prêt à annuler les modifications, vous disposez d'un autre ensemble d'options. La chose la plus simple consiste simplement à utiliser hg diff
sur les fichiers pour produire un correctif les décrivant, que vous gardez dans un endroit sûr, puis hg patch --no-commit
à réappliquer ce correctif lorsque vous souhaitez récupérer les modifications. Vous pouvez rendre cela plus fluide en installant l' extension de l' étagère , l' extension du grenier ou un autre parent. Vous pouvez également utiliser l' extension des files d'attente , mais cela utilise un marteau pour casser un écrou. Vous pouvez même simplement valider les modifications, puis mettre à jour vers le parent et valider d'autres travaux là-bas, en laissant les modifications dans une branche anonyme tronquée - hg commit -m 'temporary branch' && hg up $(hg log -r 'parents(.)' --template '{node}')
(même si cela peut être plus facile à faire manuellement!). Vous devrez alors faire attention à ne pas pousser ce changement, cependant.