web-dev-qa-db-fra.com

Mercurial dit "abandon: modifications non validées en suspens", je ne veux pas m'engager

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?

31
Emanuel Landeholm

Utilisez extension du grenier pour ranger/enregistrer temporairement les travaux en cours.

7
Bert F

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
36
minaz

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:

  • "Abandonner: Push crée de nouvelles têtes distantes!" (têtes multiples potentielles)
  • "Abandonner: traverse les branches (utilisez" fusion hg "ou" mise à jour hg -C ")" (travailler dans une autre direction que les modifications extraites), ou
  • "Abandon: modifications non validées en attente" (impossible de fusionner en raison de modifications locales)

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.

6
Christophe Muller

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).

5
xrstf

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.

1
dls