Scénario: Repo local, avant de quitter le bureau
$ hg status
M important/update1
M another/important/update2
M work/in/progress
Je veux valider et pousser important/update1 et important/update2, parce que je veux récupérer ces fichiers dans mon référentiel local quand je rentrerai. Je ne suis pas prêt à m'engager travail/en cours/progrès. En fait, il n'analyse même pas correctement. Ce fichier est ouvert dans mon IDE et je veux juste le laisser tel quel).
Maintenant je fais: (précipitamment, le tram part dans trois minutes)
$ hg commit important/update1 another/important/update2
$ hg Push
pushing to https://**censored**
searching for changes
abort: Push creates new remote heads on branch 'default'!
(did you forget to merge? use Push -f to force)
D'accord. Un collègue a poussé quelque chose ... (le tram part dans deux minutes ...)
$ hg pull (really important update!)
$ hg update
abort: outstanding uncommitted changes
Merde. J'ai besoin de la mise à jour de mes collègues mais je ne vais pas m'engager work/in/progress, encore moins Push it! Et je viens de rater mon tram ...
Comment gérez-vous cela?
Utilisez extension du grenier pour ranger/enregistrer temporairement les travaux en cours.
Si vous ne souhaitez pas utiliser shelve, vous pouvez le faire avec seulement 3 commandes:
hg diff > mylocalchanges.txt
hg revert -a
# Do your merge here, once you are done, import back your local mods
hg import --no-commit mylocalchanges.txt
Un workflow pour les personnes développant plusieurs fonctionnalités/corrections de bugs en même temps:
Une possibilité serait de cloner autant de référentiels que de fonctionnalités que vous développez. Mais cela peut être coûteux en espace disque, en temps et aussi déroutant. Une autre possibilité est de travailler sur un sujet différent sur le même référentiel local (appelons-le Main) mais utilisez juste un deuxième pour valider sélectivement une ou plusieurs fonctionnalités souhaitées dans le référentiel central.
Ceci est très bien expliqué et détaillé dans cet article:
https://blogs.Oracle.com/tor/entry/Mercurial_tip_checking_in_regularly
Si vous rencontrez les messages d'erreur suivants:
puis l'article ci-dessus explique pourquoi tout cela se produit, et propose un workflow pour éviter ces problèmes. Remarque: il est également possible d'utiliser le mécanisme de patch mqueues pour pousser vos modifications (voir commentaire n ° 1 de l'article).
J'espère que cela vous aidera.
J'utilise généralement TortoiseHg Shelve Extension , que vous pouvez également activer pour utiliser sur votre cmdline:
[extensions]
tortoisehg.util.hgshelve =
Vous pouvez maintenant utiliser les commandes:
$ hg shelve
Si vous savez que la mise à jour n'interfère pas avec notre travail, vous pouvez également forcer l'extraction/la mise à jour (hg pull -f
).
Si vous essayez simplement d'exposer du code au réseau afin que vous puissiez tirer et continuer à travailler à la maison, je ne sais pas si votre collègue devrait pousser vers le même référentiel. Vous pourriez envisager d'utiliser un référentiel de développeurs: un référentiel pour votre usage personnel (soit par des autorisations, ou simplement par application/politesse).
Certains programmes (tels que FogCreek's Kiln SW ) offrent cette capacité, mais même si vous venez de stocker des dépôts sur un réseau/lecteur partagé, vous devriez pouvoir y créer un dépôt personnel.
Si ce n'est pas le cas (c'est-à-dire: vous n'avez pas les autorisations de serveur), vous pouvez également envisager d'utiliser une branche nommée. Dans ce cas, vous devez simplement vous engager dans votre branche nommée et pousser cette branche vers le serveur. Vraisemblablement, votre collègue laisserait vos succursales nommées tranquilles et il n'y aurait rien de nouveau à tirer et à fusionner. En termes de "désordre de branche", oui, ils sont présents pendant la durée de vie du dépôt, mais la fermeture de la branche nommée juste avant la fusion les supprimera de votre vue et résoudra certains problèmes.
> hg update <branch name>
> hg commit --close-branch -m 'closing branch <branch name>'
À la fin de la journée, je ne considère pas l'encombrement des succursales comme une préoccupation majeure, sauf si vous (a) avez une équipe géante ou (b) ne fermez pas vos succursales.