git pour des projets personnels (un homme). Surpuissance?

84

Je connais et utilise deux systèmes de contrôle de version: Subversion et git. Subversion, à partir de maintenant, est utilisé pour des projets personnels où je suis le seul développeur et git est utilisé pour des projets open source et des projets où, je pense, d'autres vont également travailler sur le projet. Ceci est principalement dû aux capacités étonnantes de git en matière de forking et de fusion, où chacun peut travailler sur sa propre branche; très utile.

Maintenant, j'utilise Subversion pour des projets personnels, car je pense que git n’a aucun sens. Cela semble être un peu excessif. Cela me convient si le système est centralisé (sur mon serveur domestique en général) lorsque je suis le seul développeur; Je fais des sauvegardes régulières quand même. Je n'ai pas besoin de la capacité de créer ma propre branche, la branche principale est ma branche. Oui, SVN a un support simple pour la création de branches, mais un support beaucoup plus puissant n’a aucun sens, je pense. La fusion peut être pénible, ou du moins d'après ma petite expérience.

Y a-t-il une bonne raison pour que j'utilise Git sur des projets personnels, ou est-ce tout simplement excessif?

Anto
la source
61
Non, j'utilise git et hg pour des projets personnels. Avoir un contrôle de révision local est une aubaine.
Semaine du
7
Git est à bien des égards meilleur pour tous les projets, qu’ils aient un grand nombre de contributeurs ou non: git compresse beaucoup, beaucoup plus efficacement que svn (et est beaucoup plus rapide!), Git rend les sauvegardes triviales, et git ne le fera pas être un obstacle si quelqu'un d'autre veut contribuer.
Artefact2
4
J'utilise le contrôle de version pour envoyer mon code dans github ou bitbucket, il me sert de sauvegarde, et peut-être qu'un jour, j'écrirai quelque chose qui intéressera vraiment les gens.
Mahmoud Hossam
8
"Je n'ai pas besoin de pouvoir créer ma propre branche, la branche principale est ma branche." Beaucoup de gens ont dit la même chose undoquand il s’agissait d’une fonctionnalité relativement nouvelle dans les applications. Maintenant, tout le monde se rend compte qu’il en avait toujours besoin. Vous devez créer une branche, vous ne le savez tout simplement pas.
Dan Rosenstark le
1
@ rtperson ouais, tu peux le faire, mais en fait, j'aime davantage Mercurial, même si j'aime plus github que bitbucket.
Mahmoud Hossam

Réponses:

155

Ce n'est pas exagéré. La principale raison pour laquelle j'ai commencé à utiliser Git et Mercurial par-dessus Subversion pour des projets personnels est qu'il est beaucoup plus facile de lancer un référentiel.

Voulez-vous démarrer un nouveau projet?

> git init

BAM! Il n'est pas nécessaire de configurer un serveur de référentiel ni d'archiver une structure de dossiers pour prendre en charge la création de branches et de balises dans un référentiel de sous-version.

Partager votre projet plus tard est juste une question de: git push(autre que d'avoir un référentiel distant). Essayez de le faire rapidement avec subversion!

Spoike
la source
24
Accepté. Je n'aurais pas pu prouver plus de tort à propos de l'engouement excessif que ça;)
Anto
7
Steve341: Je conserve généralement tous les projets de code source dans un dossier nommé "projets". C'est là que je garde tous les référentiels, un pour chaque projet de code source. Je n'ai jamais eu besoin de suivre plusieurs projets ensemble dans un seul et même référentiel VCS; c'est à cela que servent les systèmes de gestion de la dépendance tels que Ivy ou Maven.
Spoike
3
@ Steve341 Comment est-il difficile de garder une trace de ce genre de choses? Vous avez juste un dossier qui contient tous vos repos. Ce n'est pas différent de votre système, mis à part le fait que votre système est une pratique extrêmement mauvaise lors de l'utilisation de git ...
alternative
2
@ Steve314:echo 'for dir in projects/*; do cd "$dir"; git push; cd ..; done' > update_all; chmod +x update_all
André Paramés le
2
git initet bam! Oh oui, puis cp ../the-other-project/.gitignore .avant le premier commit. Bam!
Dan Rosenstark le
46

Je soutiendrais qu'utiliser Subversion pour des projets personnels locaux est excessif, alors que Git ne l'est décidément pas. Git prendra moins de place (en raison du concept inefficace de "révisions" de SVN par rapport aux instantanés d'objet de Git), nécessite moins de configuration ( git initcomparé à une douzaine de svnadmincommandes et d'autorisations de configuration, etc.), est plus facile à sauvegarder ( git clone --bare[ou git push originsi vous utilisez Github ou similaire] et vous avez terminé), et dispose de meilleurs outils pour gérer votre code (la création de branches est gratuite, et la fusion est plus facile et plus propre). Ce n’est pas parce que personne n’a un clone de votre référentiel que les avantages de tout système DVCS sont "excessifs".

De plus, je dirais que le support des branches de Git est moins complexe que celui de SVN, avec de plus grandes récompenses.

dégraissage
la source
J'imagine que j'aurais dû utiliser "puissant" au lieu de "complexe"
Anto
3
@Anto: Peu importe. Je dirais toujours fondamentalement la même chose: le branchement supérieur de Git n'a tout simplement aucun inconvénient, comparé à SVN.
Greyfade
3
Git ne "polluera" pas non plus votre arbre source avec des fichiers de suivi dans chaque sous-répertoire.
WarrenT
4
@WarrenT "La pollution" de l'arbre source ne se produit pas dans les versions 1.7 et ultérieures de svn.
Pllee
4
Créer un référentiel de système de fichiers dans Subversion est une commande ( svnadmin createplus une pour effectuer l'extraction ou l'importation initiale), il n'est pas nécessaire de configurer les autorisations, etc. Je ne nie pas que Git est souvent un meilleur outil, mais les inexactitudes concernant Subversion ne sont d'aucune aide.
Josh Kelley
34

Penser que vous ne créerez jamais votre propre code est un peu à courte vue. J'ai diversifié mon propre code plusieurs fois, en particulier lorsque j'essayais une nouvelle approche qui ne m'avait pas encore convaincu. Vous voudrez éventuellement la fonctionnalité.

Cela vient d'un utilisateur de longue date de Subversion. La consolidation sur un seul outil peut réellement vous faciliter la vie.

Berin Loritsch
la source
2
Oui, je crois que c’est le but des branches, de l’expérimentation. C'était ma première réserve en lisant la question de Op. Si vous ne branchez pas dans votre référentiel, vous "branchez" dans votre tête et c'est tout simplement insensé lorsque vous avez le contrôle de version en place.
Chris
3
Vous pouvez créer une branche avec subversion. Et fusionner. Sorte de. En fait, la seule fois où j'ai essayé, je me suis retrouvé avec un référentiel corrompu avec lequel je ne pouvais plus travailler, et récupérer après une sauvegarde (avec la branche déjà appliquée) n'a pas aidé, j'ai donc perdu tout mon historique et démarrer un nouveau dépôt ... mais je l’ai blâmé pour la transition de la version 1.4.? à 1,5 (je pense - c'était il y a quelques années maintenant). Probablement ramifier et fusionner des œuvres, vraiment. Si vous êtes assez courageux pour l'essayer. Si j’avais entendu parler de svn dump à ce moment-là, j’aurais pu résoudre le problème avec quelques efforts, bien sûr.
Steve314
@Chris, j'aime bien avoir une version de travail sur laquelle je peux compter à tout moment. Bien sûr, vous pouvez accomplir cela avec des balises, mais il arrive parfois qu'une branche soit parfaitement logique. N'oubliez pas les autres avantages de git / mercurial.
Berin Loritsch
9

Le surmenage est réservé aux dommages collatéraux causés par la "solution". Utiliser une arme à feu pour tuer une mouche signifie qu'il y a des dommages causés par la balle qui va ailleurs. C'est exagéré. Utiliser quelque chose de plus puissant que nécessaire qui ne cause pas de problème n'est pas excessif et peut être une bonne chose si cela vous aide à rationaliser votre processus de développement. Cela ne cause aucun préjudice et vous permet de n'avoir à mettre à jour qu'un ensemble de logiciels au lieu de deux. Alors pourquoi s'embêter avec deux systèmes au lieu d'un?

pierre précieuse
la source
Cela pourrait être excessif (oui, avec cette définition) si le système vous gênait. Je me demande si c'est une bonne idée d'utiliser git pour des projets personnels. Pourriez-vous me dire quels sont les avantages spécifiques ? Cette réponse ne répond pas à cela. Je vois git comme un système plus puissant et trop puissant pour des projets personnels. Cependant, il ne doit pas nécessairement y avoir de problème, tant que cela ne vous gêne pas. Pourriez-vous développer votre réponse?
Anto
1
L'excès est également utilisé lorsque l'effort utilisé pour appliquer la solution est hors de proportion. On peut dire que si vous utilisez déjà la subversion pour des projets locaux, l'effort nécessaire pour apprendre Git ou tout ce qui est excessif. Ou peut-être une leçon utile pour développer des compétences transférables, bien sûr. Personnellement, j’utilise toujours la subversion - c’est mordu à plusieurs reprises, mais je ne laisse que des cicatrices mineures. Je suis intéressé par l’apprentissage de Git, mais chaque fois que j’allais chercher, les tutoriels que j’ai trouvés étaient cryptés ou je ne pouvais pas obtenir d’outil stable pour Windows ou il y avait un autre obstacle qui donnait à tout ça l’air de devenir excessif.
Steve314
7

J'utilise Git pour mes projets solo et j'adore ça. J'utilisais auparavant Subversion et je n'ai pas encore vu d'inconvénient à utiliser Git. C'est plus puissant, mais pas d'une manière qui rend les choses simples plus compliquées. Rendre des choses simples inutilement compliquées / coûteuses / lentes / etc. IMHO est une condition nécessaire pour appeler quelque chose de trop. De plus, sur Github, j’ai demandé à des personnes qui avaient précédemment participé à des projets uniques d’ajouter une fonctionnalité que je voulais, puis je leur ai envoyé des demandes de tirage. Je trouverais ça plutôt cool que quelqu'un qui s'intéresse à mes projets fasse la même chose.

Dsimcha
la source
7

Je n’avais jamais utilisé le contrôle de la source sur des projets personnels avant DVCS. C’est donc un peu étrange d’imaginer quelqu'un qui prend le point de vue opposé. Certaines de mes raisons sont:

  • Facile à installer et à démonter. Par exemple, un collègue m'a offert un casse-tête de programmation la semaine dernière, que j'ai résolu en plusieurs étapes. J'ai fait un dépôt git qui a duré toutes les 45 minutes pour tenir mon travail, puis il était parti. Je ne sais pas à quel point une telle chose est facile dans la subversion, mais je n'ai jamais entendu dire que quelqu'un le fasse.
  • Débranché. Pour moi, le fait de pouvoir travailler hors connexion est beaucoup plus avantageux pour un projet de loisir que pour un projet professionnel. Je n'ai pas besoin de percer le pare-feu de ma maison ou d'héberger un projet en public. Je peux mettre temporairement un repo sur une clé USB ou un ordinateur portable, tout en maintenant la synchronisation.
  • Tout colo. La combinaison du référentiel et de l'arborescence de travail facilite la tâche de suivi de petits projets lors de mises à niveau de systèmes d'exploitation.
  • Caractéristiques puissantes. Bien sûr, je n’ai pas besoin de l’alimentation tout le temps, mais c’est là quand j’en ai besoin, et ne consomme aucune ressource quand j’en ai pas.
Karl Bielefeldt
la source
6

On m'a dit que git-bisectc'est vraiment bien de trouver le commit exact qui a introduit un comportement donné, en naviguant dans les commits en fonction de votre contribution.

Vous devrez le faire un jour pour des choses que vous ne pouvez tout simplement pas comprendre.


EDIT: De plus, la capacité de créer des branches est très importante lorsque vous devez corriger des corrections de bugs dans les anciennes versions utilisées par les clients. Vous devez être capable de gérer "corrigez simplement cette petite chose mais je ne veux pas de la version la plus récente car je ne veux pas la tester à nouveau maintenant".


la source
2

Cela dépend de la gravité de la mise à jour de votre propre code. Si ce que vous construisez est par exemple une simple bibliothèque qui n’aura que la version actuelle (ou tant que cela sera vrai), j’utiliserais personnellement une option de sauvegarde de base telle que Dropbox. Si vous perdez tout votre code, vous pouvez le récupérer sur le Web. Dropbox dispose d’une sauvegarde de la version 30 jours si vous faites vraiment quelque chose de stupide.

Cependant, si vous avez par exemple besoin de maintenir des branches Production et Dev, alors git est un excellent outil - et bien plus rapide que svn. Attention toutefois au risque de défaillance du disque dur si vous ne stockez que les données localement.

Chris Moschini
la source
1
Oui, j'utilise DropBox pour des projets personnels. Le versioning est loin d'être aussi sophistiqué comme un véritable VCS mais il est très bien pour les petits projets que je fais dans mon temps libre, et il ne nécessite pas d' attention du tout (par exemple , n'engage, à jour des fichiers comme vous travaillez sur eux..)
jhocking
oh et accessoirement parce que je développe des jeux, mes projets ont tendance à avoir beaucoup de fichiers binaires (fichiers image, clips audio, etc.) et la plupart des systèmes de contrôle de version ne sont vraiment conçus que pour le code source.
Jhocking
Git fonctionne très bien avec les fichiers binaires, les diffs sont juste moins intéressants. Heureusement, diff n'est pas verrouillé dans git - si vous pouvez trouver un outil de diff binaire que vous aimez, vous pouvez l'utiliser facilement avec git (à partir de la ligne de commande)
Chris Moschini le
On m'a dit que Git gaspille beaucoup de fichiers binaires de gestion de version dans l'espace, mais ce que l'on m'a dit peut être incorrect. En gros, on m'a dit que la plupart des actifs binaires (je suppose que tous les fichiers binaires, mais les images et les sons entrant dans un jeu) doivent être entièrement sauvegardés à chaque version, afin que Git remplisse votre disque dur avec le référentiel local.
Jhocking
Ce n'est que du gaspillage si vous ne vouliez pas mettre à jour les fichiers binaires. Si vous avez besoin de les mettre à la version, l'historique des versions n'est pas perdu. Je pense qu'ils impliquent accidentellement que git bouffe l'historique de ses versions lors du suivi des fichiers binaires - c'est inexact. git.wiki.kernel.org/index.php/GitSvnComparsion
Chris Moschini
2

J'utilisais toujours, toujours, toujours un système de contrôle de version pour tout type de projet de développement. Grand ou petit n'a pas d'importance. Que je joue à la maison avec une nouvelle technologie, que je rédige un petit numéro d'aide pour me simplifier la vie ou que je développe professionnellement au sein d'une grande équipe distribuée, je voudrais toujours un système de contrôle de version pour me sauvegarder.

Bien sûr, la plupart du temps, pour les petits projets personnels, vous n’utiliserez pas la plupart des fonctionnalités, mais la configuration d’un référentiel git (ou même d’un référentiel Subversion local) n’a rien de grave, allez-y! Et avant de vous en rendre compte, vous voudrez savoir "bon sang, quel était le contenu du fichier X vendredi dernier?". Sans contrôle de version - bonne chance ;-)

Donc, peu importe que vous utilisiez git ou SVN - personnellement, je commence à migrer de plus en plus de choses de SVN vers git, mais l'essentiel est d'utiliser le contrôle de version, même pour les petites choses.

perdian
la source
1

Seulement parce que personne ne l’a mentionné: pour les projets personnels, darcs est vraiment bon et moins impliqué que git pour faire du contrôle de version simple. Ce n'est pas aussi rapide pour les grands projets, mais Subversion non plus!

wlangstroth
la source
1
Cela semble un peu lié à la façon dont vous connaissez bien les darcs. Je ne l'ai jamais utilisé mais j'ai beaucoup utilisé git. Pour moi, c’est très simple, mais je parie que je me gratterais la tête si j’utilisais des darcs.
Sam
1
Si vous avez déjà maîtrisé l’interface folle de git, darcs serait un jeu de piste.
wlangstroth
1
Pouvez-vous, s'il vous plaît, expliquer pourquoi Darcs est préférable pour les petits projets, alors git?
shabunc
0

Comprendre que ce que nous faisons est de l’expérimentation peut être un puissant changement de paradigme mental. Avoir un outil simple et peu coûteux pour supporter cela améliore votre capacité à avancer, en partie parce qu’il améliore votre capacité à annuler toute expérience quand elle se révèle médiocre.

De nombreux développeurs disent: «Je ne fais que des copies de mon code. Mais ces copies deviennent difficiles à gérer et finissent par être encombrées. Vous avez plusieurs copies et vous ne pouvez pas vous souvenir de quelle copie pour quoi, puis essayez de savoir quand il est sécuritaire de les supprimer.

Tout cela devient encore plus précieux lorsque l'expérience implique des modifications coordonnées sur plusieurs fichiers. Et quand il s’agit d’un projet solo utilisant Git, cela devient encore plus simple.

Au lieu de me demander si je devrais l'utiliser sur un projet solo, je pense maintenant à quel dommage de ne pas l'avoir découvert plus tôt.

WarrenT
la source
Pour connaître le point de vue du concepteur, regardez Linus sur Git sur YouTube (~ 70 minutes)
Warren, le