comment utiliser le contrôle de version

19

Je suis en train de développer un site Web en php dans localhost et au fur et à mesure que ses modules sont terminés, je le télécharge sur le cloud afin que mes amis puissent le tester en alpha.

Alors que je continue de développer, j'ai beaucoup de fichiers et je perds la trace du fichier que j'ai édité ou changé, etc.

Donc, ma question est: Existe-t-il un moyen / service / application facile à suivre pour suivre toutes les modifications / modifications / nouveaux fichiers et gérer les fichiers pendant que je développe le site Web. Dès que j'en ai fini avec un module, je veux le télécharger sur le cloud (j'utilise Amazon Cloud Service). Si quelque chose arrive aux nouveaux fichiers, je pourrais vouloir revenir à l'ancien fichier. Et peut-être, en un ou deux clics, j'arrive à voir les fichiers que j'ai édités ou modifiés depuis le dernier que j'ai téléchargé?

ptamzz
la source
5
Il y a beaucoup de suggestions sur le système de contrôle de version à utiliser, et pour être honnête, tous sont meilleurs que votre méthode "manuelle" actuelle.
Johan

Réponses:

28

La gestion de la configuration logicielle , dont le contrôle de version fait partie, est un peu plus complexe que le suivi des modifications apportées aux fichiers, bien que vous puissiez certainement commencer par cela. Mais lisez les articles Wikipedia liés ci-dessus ainsi que le tutoriel de Joel Spolky sur Mercurial .

Pour commencer, choisissez l'un de Mercurial, GIT ou Bazaar, dans cet ordre, et installez-le avec des outils pour votre IDE et votre système d'exploitation (je préfère Mercurial avec HGE pour Eclipse).

  1. Initialisez un référentiel à partir de votre répertoire de travail ( hg init avec Mercurial).
  2. Décidez quels fichiers et répertoires vous souhaitez suivre et lesquels ne le sont pas. La règle générale n'est pas de suivre les fichiers générés par les compilateurs et autres outils.
  3. Utilisez la commande pour ajouter les fichiers et les répertoires au référentiel ( hg add pour Mercurial).
  4. Indiquez à l'outil les modèles des fichiers que vous ne souhaitez pas suivre (modifiez .hgignore pour Mercurial).
  5. Effectuez un commit pour suivre les versions originales ( hg ci ).
  6. Effectuez une validation après chaque jalon logique, même s'il est petit.
  7. Ajoutez de nouveaux fichiers au fur et à mesure que vous les créez.
  8. Répétez les deux derniers.
  9. Sauvegardez votre répertoire de travail et le référentiel aussi souvent que possible.

Avec vos fichiers dans le référentiel, vous pouvez connaître les différences entre deux versions d'un fichier ou d'un répertoire ou le projet complet ( hg diff ), voir l'historique des modifications ( hg hist ) et annuler les modifications ( hg up -r ).

C'est une bonne idée de baliser (balise hg ) le référentiel avant de publier votre code afin qu'il y ait un moyen facile de revenir exactement à ce que vous avez publié pour des modifications ou des comparaisons.

Si vous souhaitez expérimenter avec une ligne de développement différente, faites-le dans une branche simple en clonant le référentiel principal ( clone hg ) et en ne repoussant pas tant que l'expérience n'est pas concluante. C'est aussi simple que d'avoir un répertoire de travail différent pour l'expérience.

Si l'expérience concerne une nouvelle version mise à niveau, clonez puis branchez (branche hg ) afin que vous puissiez garder toutes les copies des référentiels mises à jour sans qu'une expérience n'interfère avec l'autre.

Linus Torvalds (qui traite des dizaines de milliers de fichiers et des millions de lignes de code dans ses projets) a expliqué à Google pourquoi l'outil ne peut pas être CVS, SVN ou l'un des nombreux logiciels gratuits et commerciaux autour ; cela vaut vraiment la peine d'être regardé.

Apalala
la source
1
Je préfère également Mercurial. J'aime le support dans Netbeans car pendant que vous codez, il vous montre chaque ligne qui a changé depuis votre dernier commit. Il colore également les fichiers nouveaux / modifiés / inchangés dans l'arborescence du produit. Qui sonne comme il serait utile pour l'OP: I lose track of which file I've edited or changed. HGE peut faire ça aussi, je ne l'ai pas utilisé.
JD Isaacks
1
+1 pour décrire le processus ainsi qu'une partie de la façon d'utiliser les outils pour le faire.
Donal Fellows
En guise de question secondaire, le .xcodeprojfichier que Xcode utilise pour les projets iOS serait-il considéré comme quelque chose à dire à Mercurial d'ignorer, ou est-il important de garder le fichier synchronisé?
Kevin Yap
1
@Kevin Je ne connais pas Xcode, mais les derniers IDE et outils ont des fichiers de configuration distincts pour l'ensemble des projets (versions de la langue et de la bibliothèque, règles de formatage du code, dépendances, etc.) et les préférences des utilisateurs (répertoires où je place les éléments, le panneau mise en page, habillages, taille de police, signature personnelle). Les premiers peuvent être inclus dans le référentiel si l'équipe y consent. Ce dernier ne doit pas être inclus, car une mise à jour du référentiel écraserait vos préférences avec celles de quelqu'un d'autre, et cela devient rapidement ennuyeux et contre-productif.
Apalala
1
@John: NetBeans le fait pour chaque VCS qu'il prend en charge. À ce stade, ce n'est qu'une fonctionnalité de base des IDE.
Mike Baranczak
13

Je recommanderais vivement Git. Apprenez-en plus ici: https://lab.github.com/

Si vous n'aimez pas Git, il existe d'autres solutions de contrôle de version. Vous pouvez consulter SVN.

Todd
la source
1
En tant qu'utilisateur ordinaire de Git, je voudrais ajouter qu'il est extrêmement facile et intuitif de récupérer les commandes essentielles. Et le support est excellent pour que vous ne soyez pas perdu lorsque vous cherchez de l'aide. J'ai utilisé SVN, mais ce n'était pas aussi facile pour moi, mais cela pourrait convenir à de nombreux utilisateurs.
Muhammad Usman
1
+1 Considérez également: les gens choisissent de passer de svn (un VCS) à git (un DVCS - d = distribué) mais pas de GIT à SVN (par choix).
Michael Durrant
7

Est-ce juste toi ?, utilise un DVCS

Aussi contre-intuitif que cela puisse paraître, un système de contrôle de version distribué (mercurial, git, bazaar) est préférable de commencer qu'un système centralisé (svn, cvs). Pourquoi?, Vous l'installez sur votre machine et exécutez votre référentiel localement, et c'est tout. Sur un système centralisé tel que svn, vous devez configurer votre client et un serveur ... et ensuite, vous devez vous connecter à un serveur pour stocker vos modifications.

Avec un DVCS, c'est vous, le référentiel local, et si vous le souhaitez, vous pouvez utiliser un service comme bitbucket.org ou github.com.

À mon humble avis, mercurial est un DVCS plus convivial et tout aussi capable pour commencer.

Y en a-t-il d'autres?, Utilisez un DVCS!

Il y a de nombreux avantages à utiliser un DVCS pour travailler avec une équipe, le plus important contrairement à un système centralisé est qu'il n'y a pas de courses de commit et c'est parce que, techniquement, le référentiel de chaque individu est une branche, et lorsque vous partagez votre change ces branches sont fusionnées pour vous et vous ne le remarquez même pas, ce qui signifie qu'au lieu d'avoir un historique de version comme celui-ci, où vous avez des gens qui canalisent leur travail en ligne droite:

entrez la description de l'image ici

Vous finissez par avoir quelque chose comme ça, où tout le monde commet juste ad hoc:

entrez la description de l'image ici

Chacun s'inquiète simplement de son propre travail pendant le versionnage (c'est-à-dire qu'il ne fait pas la course pour valider) et ne se soucie pas d'une connexion à un serveur juste pour valider.

Bonne chance

dukeofgaming
la source
1
+1 Très beaux exemples! Vous devez modifier pour souligner la douleur absente dans les arbres de fusion complexes avec des outils modernes.
Apalala
5

Pour être bref, il existe de nombreuses alternatives, parmi lesquelles Subversion (SVN) et Git semblent les plus populaires (donc les plus faciles à trouver des solutions sur le web).

Ils diffèrent tous les deux. SVN est plus simple, mais Git ne vous oblige pas à avoir un serveur pour commencer - vous pouvez contrôler la version localement.

En supposant que vous avez Linux et que vous souhaitez commencer à utiliser Git:

  1. Installer Git
  2. Allez dans le répertoire et exécutez la commande 'git init'
  3. Découvrez comment ajouter des fichiers, revoir les modifications, les valider ...
  4. ... et pour faire des choses plus avancées (revoir les journaux, annuler les modifications, ignorer les fichiers, créer des branches, les fusionner, créer et utiliser des télécommandes, utiliser des sous-modules, utiliser le support SVN, etc.).

J'espère que cela vous aidera à commencer.

Tadeck
la source
1
SVN ne nécessite pas de serveur, mais il requiert que le référentiel soit dans un répertoire différent de celui qui fonctionne. SVN et CVS sont généralement déconseillés au profit d'outils comme GIT et Mercurial qui ne nécessitent pas de connexion réseau pour le travail quotidien et ne nécessitent pas de référentiel central pour le développement de logiciels collaboratifs et distribués.
Apalala
Ne pensez-vous pas que cela est en fait identique à la création d'un serveur de référentiel SVN sur localhost? Ce dont vous avez besoin est de configurer et de maintenir le référentiel central et lorsque vous déplacez vos fichiers, vous devez vous assurer que le référentiel SVN est toujours accessible (ne pensez même pas à copier tout le référentiel central à chaque fois que vous déplacez des fichiers sur une machine différente). De plus, je ne pense pas que Subversion soit obsolète (je ne parle pas de CVS cependant) - il est juste centralisé et dans certains cas, ce serait une meilleure idée d'appliquer la centralisation.
Tadeck
Apalala, une question: comment Mercurial traite-t-elle les informations dont l'utilisateur a créé le changement spécifique? Dans Git, vous pouvez le modifier et valider le changement en tant que quelqu'un d'autre, créant ainsi un désordre (il existe une fonctionnalité pour distinguer le commiter du soumissionnaire, mais ce n'est pas assez évident). Mercurial a-t-il résolu ce problème lié au contrôle de version distribué?
Tadeck
2
@Tadeck Ce n'est pas ainsi que Mercurial et GIT fonctionnent. Dans ces derniers, une seule personne est responsable de ce qui entre dans un référentiel, que ce soit par des validations, des tirages ou des correctifs. Dans les référentiels distribués, si quelqu'un a des privilèges push, vous lui faites déjà confiance de tout votre cœur. Linus Torvalds l'explique bien dans cette conférence: youtube.com/watch?v=4XpnKHJAok8
Apalala
@Tadeck Concernant SVN, je l'ai beaucoup utilisé et j'ai fini par penser que ce n'était pas une amélioration par rapport à CVS (qui a au moins des référentiels en simple ASCII et est suffisamment mature pour ne jamais les corrompre). Encore une fois, Torvalds l'explique bien dans la vidéo que j'ai liée auparavant. L'incapacité de travailler hors ligne et l'impossibilité de fusionner rendent obsolètes les anciens outils SCM.
Apalala
2

Comme Apalala le suggère, je recommande de commander hginit . Comme vous êtes nouveau dans le contrôle de version, vous pouvez ignorer la première page. Cela devrait vous donner une bonne introduction, ensuite vous pouvez poster sur SO si vous avez des questions spécifiques.

JD Isaacks
la source
0

Je vais aller à l'encontre de l'opinion majoritaire et recommander Subversion. Subversion est facile à utiliser et fait tout ce dont les particuliers et les petites équipes ont besoin. C'est un produit mature, donc chaque IDE a un bon support. Oui, il n'a pas toutes les fonctionnalités de Git. (Je n'ai jamais utilisé Mercurial, donc je n'en parlerai pas.) Mais la plupart des développeurs n'ont pas réellement besoin de ces fonctionnalités supplémentaires.

Dépôts multiples? Je suis sûr qu'il y a des utilisations légitimes pour celles-ci, mais je ne les ai jamais rencontrées.

Pouvoir faire des commits locaux, sans accès au réseau? C'est bien d'avoir, si vous effectuez plusieurs modifications discrètes et que vous ne pouvez pas accéder au serveur de référentiel - mais honnêtement, à quelle fréquence cela se produit-il?

Git facilite la gestion des branchements et des fusions. Mais pour une équipe d'une personne, ce n'est pas si grave.

Pour quelque chose à l'échelle du noyau Linux - oui, utilisez Git. Pour le reste d'entre nous, Subversion est assez bon.

Mike Baranczak
la source
Downvoting. Les fonctionnalités de Git qui ne sont pas dans SVN (comme les branchements légers et la fusion facile) sont utiles, voire essentielles, sur les petits projets autant que sur les grands.
Marnen Laibow-Koser
1
@ MarnenLaibow-Koser Oui, c'était mon opinion à l'époque, mais après avoir utilisé Git professionnellement pendant plusieurs années, je devrais être d'accord avec vous.
Mike Baranczak
Excellent! Vous serez assimilé. : D
Marnen Laibow-Koser