Je suis relativement nouveau dans le domaine de Mercurial et mon équipe l'essaie en ce moment en remplacement de Subversion.
Comment puis-je commiter et pousser un seul fichier vers un autre dépôt tout en laissant les autres modifications dans mon répertoire de travail non commitées (ou au moins non poussées vers l'autre dépôt) ?
Cela nous arrive avec les migrations de bases de données. Nous voulons livrer la migration au contrôle de la source pour qu'un DBA puisse la voir et la modifier pendant que nous travaillons sur les modifications du code qui accompagnent cette migration de base de données. Les modifications ne sont pas encore prêtes et nous ne voulons pas les publier toutes.
En subversion, je ferais simplement :
svn add my_migration.sql
# commit only the migration, but not the other files I'm working on
svn commit -m "migration notes" my_mygration.sql
et continuer à travailler localement.
Cela ne fonctionne pas avec mercurial, car lorsque je le pousse vers l'autre dépôt, s'il y a des modifications que je n'ai pas retirées, il veut que je les retire, les fusionne et commette cette fusion dans le dépôt. Les livraisons après une fusion ne vous permettent pas d'omettre des fichiers, ce qui vous oblige à livrer tout ce qui se trouve dans votre dépôt local.
La solution la plus simple que j'ai trouvée est de livrer le fichier dans mon référentiel local, de cloner mon référentiel local, de récupérer toutes les nouvelles modifications du référentiel actuel, de les fusionner et de livrer cette fusion, puis de pousser mes modifications.
hg add my_migration.sql
hg commit -m "migration notes" my_migration.sql
cd ..
hg clone project project-clone
cd project-clone
hg fetch http://hg/project
hg push http://hg/project
Cela fonctionne, mais j'ai l'impression qu'il me manque quelque chose de plus simple, un moyen de dire à mercurial d'ignorer les fichiers déjà présents dans mon répertoire de travail, de faire simplement la fusion et d'envoyer les fichiers. Je pense que les files d'attente de mercurial peuvent le faire, mais je ne connais pas encore très bien mq.