62 votes

Comment dois-je utiliser Mercurial comme un développeur solitaire?

J'ai décidé que je veux utiliser Mercurial pour un petit projet personnel.

La plupart de l'aide, je ai lu à ce sujet parle de modifications de la fusion entre plusieurs utilisateurs. Depuis que je suis en solo, ça ne va pas arriver.

Dois-je avoir plusieurs référentiels? Mon ordinateur de développement est déjà sauvegardé tous les soirs à mon Windows Home Server, de sorte qu'il ne semble pas utile de procéder à un deuxième référentiel ailleurs juste pour des fins de sauvegarde.

Dois-je être ramification de tous les jours? Ou tout simplement autour de rejets? Ou quand?

En général, quelles sont les pratiques que vous recommandez pour le seul développeur à l'aide Mercurial?

35voto

Kurt Schelfthout Points 5437

J'utilise Mercurial développer FsCheck, un framework de test unitaire hébergé dans codeplex. Je suis actuellement le seul développeur, mais parfois les gens m'envoient des patchs.

Concrètement, j'ai un dossier dans mon système appelé "FsCheck". En cela, j'ai un référentiel, et donc de dossier, appelé principale. Généralement, j'ai un peu de dossiers à côté de celle où je travail sur des caractéristiques spécifiques ou à des corrections de bug ou quoi, dites bug-escapingexceptions et feat-statefulchecking et de patch-userFoo. Ceux-ci sont créés à l'aide de la commande hg clone.

Quand je suis fait avec une fonction ou une correction, je remets tout dans ce dossier et de le pousser à la main. Éventuellement fusionner en main. (hg commit, hg push, hg merge). Puis-je supprimer le dossier (attention à l'aide de hg statut et hg sortant que je ne suis pas de jeter quelque chose d'utile).

Je n'ai presque jamais de travail dans les principales sauf juste avant une libération, où je n'ai nettoyage final (disons de la documentation). Avant la sortie, je balise dans la main avec le numéro de version (hg tag v0.5.1).

Codeplex utilise svn comme sourcecontrol. Je ne l'utilise que pour stocker les rejets, pour laquelle j'utilise un localement vérifié SVN copie de travail, à laquelle je copie l'Mercurial référentiel à l'aide de hg archive. Puis valider à l'aide de svn. Primitif, mais il fonctionne (en utilisant Mercurial comme un SVN " super client sur windows n'est pas très convivial mais dans mon opnion)

Je n'ai pas eu à faire de la maintenance sur les versions précédentes, mais je le ferais par de cloner le dépôt principal à partir de la libération de la révision(c'est facile, depuis que j'ai marqué), et de travailler dans ce référentiel distinct. Fusionnant le tronc principal serait aussi facile que de pousser les modifications principales et la fusion.

En résumé:

  • Un dossier pour stocker tous vos projet de dépôts, avec le nom de votre projet
  • Dans ce dossier un référentiel principal, et un transitoire de dépôt par "unité de travail", avec un nom descriptif pour l'unité de travail.

C'est gentil à cause de vos branches et sur quoi vous travaillez d'une façon intuitive visible dans le système de fichiers.

29voto

Chad Birch Points 39087

De la manière que votre question est libellée, je pense que vous pouvez avoir quelques malentendus liés à la contrôle de version de la terminologie.

Vous devriez avoir un référentiel unique pour chaque projet. Vous pouvez penser à un référentiel simplement comme un dossier sur le système de fichiers. Lorsque vous initialisez un dépôt Mercurial dans un dossier particulier, tous les fichiers dans ce dossier et tous ses sous-dossiers est admissible à être ajouté au référentiel de contrôle de version. Vous n'avez pas nécessairement besoin d'ajouter de tout, mais il pourra être ajouté si vous le souhaitez.

Vous pouvez pousser ce référentiel local à un dépôt distant si vous le souhaitez, soit comme une forme de sauvegarde ou comme une méthode de partage de code avec d'autres. Mais si c'est simplement un projet personnel, il est fort probable ne sera pas nécessaire, en particulier puisque vous avez déjà une solution de sauvegarde en place.

Les Branches sont généralement utilisées pour garder les différentes "versions" du projet séparé. Comme certaines personnes l'ont mentionné, cela peut être utile en solo développeur pour essayer une méthode de refactoring du code, ou de tester une approche différente à un problème particulier. Si cela ne fonctionne pas, vous n'avez pas à vous soucier de trouver où se restaurer, ce que vous venez de torche de la branche. Si elle a fait un travail, vous fusionner la branche vers le dépôt principal (le "tronc") et de poursuivre.

Si vous ne l'obtenez à l'endroit où vous faites les "sorties" du code, et vous avez besoin de conserver les anciennes versions, vous aurez également besoin d'utiliser les branches. Par exemple, imaginez que vous relâchez la version 1.0, et certaines personnes commencent à l'utiliser. Alors qu'ils sont en l'utilisant, vous privé de continuer à travailler sur la prochaine version, peut-être, 1.1, l'ajout de fonctionnalités dans votre coffre de dépôt. Maintenant, quelqu'un découvre un bug à la sortie 1.0 code que vous avez besoin de les corriger, mais vous ne pouvez pas simplement le corriger dans le coffre et de leur donner le code, parce que c'est pas en état d'être publié. C'est là que le 1.0 branche est très pratique. Vous pouvez corriger le bug dans le 1.0 de la branche, et de fusionner la correction de changement dans le tronc, de sorte que le bug est corrigé. Ensuite, vous pouvez remballer en hausse de 1,0 avec la correction et accéder à vos utilisateurs, sans avoir à comprendre comment obtenir le tronc dans un état qu'il pourrait être rendu public.

Autre que cela, il n'y a généralement pas beaucoup de fantaisie travail impliqués dans l'utilisation de Mercurial solo. Faire un peu de travail, et quand vous avez fini une fonctionnalité, de l'envoyer pour vous donner un "point de contrôle" que vous pouvez revenir à l'avenir si nécessaire. Vous n'avez pas besoin de commettre chaque fois que vous enregistrez ou quelque chose comme ça, il suffit de faire quand vous vous sentez comme vous avez ajouté quelque chose de plutôt important. Cela vous donnera une belle histoire de ce projet, si vous avez besoin de regarder en arrière à travers elle.

Pour plus d'informations, je vous suggère fortement de prendre le temps de lire ce livre: contrôle de version Distribué avec Mercurial. Vous n'avez pas à lire dans les rubriques avancées, mais la lecture au moins les chapitres 1 à 5 et 8 vous donnera une bonne introduction à l'Mercurial et le contrôle de version, en général.

5voto

Tim Post Points 21270

J'utilise Mercurial quotidien, voir ici, j'ai aussi de l'aide à l'un des rares services d'hébergement gratuits qui prend en charge Mercurial, ShareSource (je suis sur la page des crédits). J'ai été en utilisant HG depuis Xen a chuté de BitKeeper.

Je vous conseille, pour les projets personnels, d'éviter les branches à tout prix. De Mercurial idée de ce qu'est une branche est en diffère un peu de ce que vous attendez. D'autres systèmes tels que Git faire de branchement (et savant fou les idées) un peu plus facile. Cependant, je ne l'utilise Git quand j'ai besoin facile, pas cher branches.

Ma journée typique avec hg:

(See where I left off)
# hg status 

(See what I was doing with foo)
# hg diff -r tip src/foo/foo.c

(Finish one module, commit it)
# hg commit src/foo/foo.c

(Push changes)
# hg push

La fusion est également assez simple, ainsi que de tirer des révisions spécifiques des dépôts. Mais, si votre solo, les chances sont que si elles se présenté avec une fusion à résoudre, vous avez probablement foiré par pas de mise à jour de la télécommande repo.

J'ai commencé un peu de solo hobby projets qui a obtenu très populaire, un an après que j'ai publié, je suis heureux que j'ai utilisé HG. Sa syntaxe est proche de la subversion, il est très intuitif et très facile à transporter.

Oui, bien sûr, j'utilise Git et SVN .. mais pas pour les projets personnels. Une note sur mon repo index (le lien), je l'ai ré-écrit hgwebdir en PHP parce que je voulais modifier son apparence facilement et pull RSS de chaque repo.

En bref, pour un usage personnel, vous trouverez qu'il est TRÈS sympathique. S'engage, balises, etc sont simples .. éviter les branches, à moins que vous vraiment besoin d'eux.

Ceci est un tutoriel que j'ai écrit il y a quelques temps décrivant l'utilisation de Mercurial à gérer un site web, vous pourriez y trouver de l'intérêt lors de la configuration de vos clés, hgrc, etc.

5voto

Lars Wirzenius Points 12197

J'utilise une autre version distribuée du système de contrôle de Mercurial, mais je doute que c'est important pour cela.

Sur mes projets en solo, j'utilise la ramification assez fortement. J'ai généralement une branche de développement principale ("trunk"), qui est censé avoir une version de travail à tout moment. Je veux dire par là que les tests unitaires et d'autres tests automatisés passer, et que tout le code est testé par ces tests, sauf les petits bouts que j'ai explicitement exclus de la couverture de test. Cela garantit le tronc est toujours dans une bonne forme pour le développement ultérieur.

Chaque fois que je commence à travailler sur un changement, j'ai créer une nouvelle branche du tronc branche. Cela me donne la liberté de hack gratuitement. Je ne pourrais pas vous inquiéter au sujet de l'automatisation des tests de passage dans cette branche, par exemple. Puisque c'est un endroit isolé, je peux commettre aussi souvent que je veux, et je fais: microcommits sont ma fonction préférée avec le contrôle de version distribué. Lorsque le travail dans la branche est fini, je le fusionner avec le tronc.

L'avantage de ce style de travail, c'est que si il s'avère que les changements que je travaille sur sont une mauvaise idée, je peux facilement en arrière. En fait, il n'y a rien de revenir en arrière, car les changements n'ont pas été fusionnées.

Parfois, je suis paresseux, et ne pas créer une nouvelle branche pour quelque chose de nouveau que je suis en développement. Invariablement, il s'avère que c'est une erreur, quand j'ai besoin de plus de temps que prévu pour terminer le travail. Il y a pire quand j'ai besoin de faire un autre, sans rapport avec le changement au moyen de cette. Quand je suis le tout-travail-dans-son-propre-direction de style, sans rapport avec le changement peut être fait dans sa propre branche, fusionné dans le coffre, puis l'autre branche de fusionner le changement de tronc, si c'est nécessaire.

3voto

Marcin Gil Points 16951

Ce sont généralement les mêmes que vous pouvez travailler sur tout projet de logiciel. Il suffit d'avoir ou de ne pas avoir le contrôle de version est au-delà de toute discussion ;)

Habituellement, vous venez de commettre lorsque votre article est prêt. Puisque vous avez une sauvegarde, vous n'avez pas besoin de commettre tous les jours juste pour avoir votre travail stockées en toute sécurité.

Pour la ramification: dans mon projet solo, je l'utilise principalement pour essayer d'idées, par exemple. quand j'ai une autre solution pour le même problème. Pour cela, j'aime aussi Git de la cachette de commande.

Cependant, j'ai plusieurs référentiels. J'ai un hébergement avec un accès shell que j'ai poussé. Donc, je peux le synchroniser avec celui des pensions de n'importe où je ne travaille pas et quelle que soit la station de travail que j'ai (au travail: quand j'ai le temps de code, à la maison, le bureau et sur la lappy quand à la mère de la maison).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X