Comment puis-je organiser des référentiels Git personnels?

20

Je suis en train de créer un compte GitHub avec le plan de faire une paire de bibliothèques que j'ai développées dans le cadre de certains projets iOS récents librement disponibles pour d'autres développeurs iOS à utiliser.

Je n'ai pas actuellement de sauvegarde hors site pour la plupart de mon code, donc dans le cadre de cela, je pensais à l'origine que je téléchargerais tous mes projets personnels, ou au moins tous mes projets iOS, vers un référentiel privé hébergé par GitHub . Cependant, j'ai beaucoup de projets en suspens, dont beaucoup sont de faible valeur (c'est-à-dire adaptés à partir de livres et écrits pour l'expérience d'apprentissage). Non seulement GitHub est facturé par le référentiel privé, mais il ne semble pas avoir de moyen d'organiser les référentiels de manière hiérarchique.

Y a-t-il quelque chose qui me manque qui me permettrait d'utiliser un référentiel git avec une hiérarchie et de vérifier les morceaux selon mes besoins / travailler avec eux, comme je le fais actuellement avec SVN?

Est-ce que GitHub (ou un concurrent, comme BitBucket) a des fonctionnalités d'organisation de projet qui me manquent?

A défaut, quelle est la "méthode Git" généralement acceptée pour gérer cette situation (ignorer les projets non destinés à être publiés, les stocker hors ligne, les regrouper d'une manière ou d'une autre, etc., etc.)?

Pour autant que je sache, mes options sont les suivantes:

  1. Mettez des bibliothèques sur GitHub, continuez d'héberger mon propre SVN pour tous les autres projets, utilisez une solution non VCS pour la sauvegarde hors site (blech),
  2. Mettre les bibliothèques et les logiciels que je prévois de publier sur GitHub (en tant que public et privé, respectivement), continuer à héberger mon propre SVN pour des projets qui ne m'intéressent pas autant et que je ne reviendrai probablement que pour rafraîchir ma mémoire sur la façon d'implémenter XYZ, décider que je suis prêt à les radier si ma maison implose (double coup),
  3. Mettez tout sur [GitHub et / ou BitBucket], traitez d'avoir un nombre ridicule de référentiels en recherchant ce dont j'ai besoin / en maintenant un ensemble de pointeurs hors ligne dans mon compte [GitHub et / ou BitBucket] (triple blech)
Arkaaito
la source
2
Je suis curieux de savoir de combien de référentiels nous parlons ici. Qu'entendez-vous par «pointeurs»?
mhulse
puisque c'est une vieille question, bitbucket vous permet de créer des organisations libres, et dans celles-ci, vous pouvez avoir des projets, qui peuvent avoir des référentiels. Les organisations sont gratuites jusqu'à un certain nombre d'utilisateurs. Vous pouvez gérer les autorisations par org / project / repo.
xenoterracide
Notez que GitHub propose désormais des référentiels privés illimités avec leurs plans payants.
Jack

Réponses:

11

bitbucket.org vous permet de créer des dépôts privés illimités.

Git ne vous permet pas de vérifier seulement quelques morceaux de code. Vous devez donc créer un référentiel pour chaque projet ou gérer le clonage de tous les projets. En réalité, je ne vois pas de problème à mettre tous nos petits projets dans un seul repo. Vous le clonez une fois et vous avez terminé.

Avec Git, vous n'avez plus jamais à "retirer" le code, sauf si vous supprimez votre dépôt local ou que vous passez à une autre machine. Vous synchroniserez simplement toutes vos modifications.

J'ai un problème similaire avec un grand nombre de référentiels. La raison pour laquelle je ne peux pas tous les stocker dans un seul référentiel est que je dois dériver des versions différentes de chaque référentiel. C'est très difficile à gérer.

Andrew T Finnell
la source
Vrai, vrai ... Je n'aurais probablement pas dû appeler GitHub spécifiquement, car je suis ouvert à l'utilisation de BitBucket pour des projets privés. Modifié légèrement la question pour la rendre moins particulière.
Arkaaito
5

Réponse courte ...

Ma suggestion: commencez avec des comptes publics sur GitHub et / ou Bitbucket (autre?). Lancez quelques projets publics et commencez à utiliser les outils / interfaces. Une fois que vous avez une idée des services, vous devez avoir une idée des limites, des avantages et des inconvénients de chaque service. À partir de là, vous devriez pouvoir choisir le meilleur chemin vers l'illumination du contrôle de version. :)


Longue réponse ...

Je n'ai pas actuellement de sauvegarde hors site pour la plupart de mon code, donc dans le cadre de cela, je pensais à l'origine que je téléchargerais tous mes projets personnels, ou au moins tous mes projets iOS, vers un référentiel privé hébergé par GitHub . Cependant, j'ai beaucoup de projets assis, dont beaucoup sont de faible valeur (c.-à-d. Adaptés de livres et écrits pour l'expérience d'apprentissage).

Avez-vous envisagé d'installer votre propre client Git? Si vous payez déjà pour l'hébergement Web, il peut être judicieux d'utiliser cet hôte pour votre propre configuration Git.

Par exemple, mon hôte est WebFaction (sans affiliation):

Installation de l'application Web Git

Prendre cette route peut vous permettre d'économiser des $$$, en particulier. si vous payez déjà pour l'hébergement.

Non seulement GitHub est facturé par le référentiel privé,

Juste pour clarifier pour les autres (encore une fois, aucune affiliation commerciale à GitHub ou BitBucket):

GitHub: Plans et prix

  • 7 $ / mois. pour jusqu'à 5 référentiels privés , illimité tout le reste.
  • 12 $ / mois pour jusqu'à 10 référentiels privés , illimité tout le reste.
  • 12 $ / mois pour jusqu'à 20 référentiels privés , illimité tout le reste.

Notez que la tarification "Business Plans" est différente.

Tarification de l'hébergement repo Git et Mercurial pour Bitbucket par Atlassian

Comme indiqué par Andrew dans l'autre réponse, Bitbucket vante les repos privés illimités.

  • 5 utilisateurs: gratuit
  • 10 utilisateurs: 10 $ / mois.
  • 25 utilisateurs: 25 $ / mois.
  • 50 utilisateurs: 50 $ / mois.
  • 100 utilisateurs: 100 $ / mois.
  • 200 $ / mois illimité .

il ne semble pas avoir de moyen d'organiser hiérarchiquement les référentiels.

Je ne sais pas exactement ce que vous entendez par "hiérarchiquement" (probablement parce que je ne suis pas familier avec SVN).

Je ne sais pas si cela pourrait aider, mais vous pouvez consulter ce tableau de comparaison pour voir comment les commandes se comparent / diffèrent:

Y a-t-il quelque chose qui me manque qui me permettrait d'utiliser un référentiel git avec une hiérarchie et de vérifier les morceaux selon mes besoins / travailler avec eux, comme je le fais actuellement avec SVN?

Ramification?

Est-ce que GitHub (ou un concurrent, comme BitBucket) a des fonctionnalités d'organisation de projet qui me manquent?

Je ne sais pas si cela vous aidera, mais vous pouvez jeter un œil à:

Git est livré avec des outils GUI intégrés pour la validation ( git-gui ) et la navigation ( gitk ), mais il existe plusieurs outils tiers pour les utilisateurs à la recherche d'une expérience spécifique à la plate-forme.

... encore une fois, je ne sais pas si l'un de ces outils pourrait vous aider à avoir une idée de ce qui est possible.

Pour être clair, je ne suis pas sûr de votre niveau de compétence Git ... si vous êtes nouveau sur Git / GitHub, l'utilisation d'une interface graphique peut être un moyen rapide / facile pour vous de vous faire une idée des choses. Personnellement, j'aime utiliser les applications officielles GitHub pour Mac / Windows.

A défaut, quelle est la «manière git» généralement acceptée de gérer cette situation (ignorer les projets non destinés à être publiés, les stocker hors ligne, les regrouper d'une manière ou d'une autre, etc., etc.)?

Si j'étais vous, j'utiliserais des référentiels.

De combien de référentiels privés avez-vous besoin?

Si vous souhaitez utiliser GitHub, une solution pourrait être d'obtenir le plan le moins cher et d'utiliser quelques dépôts privés pour contenir tout votre code de test / non public. Vous pouvez simplement utiliser une structure de dossiers sur votre mainbranche pour maintenir une structure hiérarchique, ou vous pouvez utiliser plusieurs branches pour garder les choses plus séparées.

Conseil: Si vous utilisez une version plus récente de Git, vous pouvez extraire des branches spécifiques en utilisant git clone -b mybranch --single-branch git://sub.domain.com/repo.git:

Je dois cependant vous avertir, l'utilisation de branches pour organiser le code (comme les dossiers) n'est pas vraiment la meilleure façon de faire les choses (cependant, rien ne dit que vous ne pouvez pas emprunter cette voie).

( Voir ma réponse ici pour des informations connexes concernant les branches GitHub. )

Encore une fois, je pense que plusieurs dépôts sont la voie à suivre.

Vous pourriez vous demander si votre code doit vraiment être privé; est-il possible que vous puissiez rendre public ce code sans aucune répercussion?

Mettez des bibliothèques sur GitHub, continuez d'héberger mon propre SVN pour tous les autres projets, utilisez une solution non VCS pour la sauvegarde hors site (blech),

Si vous suivez cette voie, Dropbox (ou similaire) peut être un bon moyen d'obtenir une certaine forme de contrôle de version et de synchronisation pour votre sauvegarde hors site.

Mettre les bibliothèques et les logiciels que je prévois de publier sur GitHub (en tant que public et privé, respectivement), continuer à héberger mon propre SVN pour des projets qui ne m'intéressent pas autant et que je ne reviendrai probablement que pour rafraîchir ma mémoire sur la façon d'implémenter XYZ, décider que je suis prêt à les radier si ma maison implose (double coup),

Cela me ramène à la question "Payez-vous déjà pour l'hébergement? Si oui, vous pouvez installer votre propre hôte Git"; l'avantage étant que vous pourriez avoir tout le code source sous le parapluie Git, même s'il n'est pas tout sur le même hôte (c'est-à-dire utiliser GitHub pour les trucs publics que vous voulez montrer).

Mettez tout sur [GitHub et / ou BitBucket], traitez d'avoir un nombre ridicule de référentiels en recherchant ce dont j'ai besoin / en maintenant un ensemble de pointeurs hors ligne dans mon compte [GitHub et / ou BitBucket] (triple blech)

---> Voir ma courte réponse ci-dessus. ^^^^^^

mhulse
la source
0

Voici ce que je fais:

  • Mettez les projets autonomes que vous souhaitez rendre publics dans des dépôts GitHub séparés . Étant donné que GitHub est actuellement le lieu de facto pour partager du code, cela rendra vos projets plus faciles à découvrir / à forker.
  • Pour tous les projets que vous souhaitez garder privés, placez-les dans des dépôts privés hébergés par le fournisseur de votre choix. Comme déjà mentionné, Bitbucket est un bon choix pour cela car il permet des dépôts privés illimités.
  • Mettez tout autre code dans un dépôt "indésirable". Cela peut inclure du code utilisé pour l'apprentissage et les tests ainsi que de petits extraits qui ne font pas vraiment partie d'un projet. Tant qu'il n'y a aucune raison de garder cela privé, vous pouvez également héberger ce dépôt sur GitHub.

    En plus de tous les avantages habituels du contrôle de version (que vous avez déjà avec SVN), votre code est désormais sauvegardé en ligne. Dans le cas où l'un de vos codes indésirables se transforme en projet, vous pouvez simplement le transformer en son propre référentiel.

    Vous pouvez mettre ce code dans des référentiels séparés ou utiliser quelque chose de fantaisiste comme des sous-modules ou sous-arborescences git, mais je trouve qu'il est plus simple de tout conserver dans un seul référentiel et de l'organiser à l'aide de dossiers. C'est beaucoup plus simple et git est assez rapide pour que la taille du dépôt ne soit pas un problème.

bmaupin
la source
0

Une technique possible serait d'utiliser des branches.

Les branches dans un dépôt git ne sont que des pointeurs vers des commits, elles ne doivent en aucun cas être liées les unes aux autres. Vous pouvez donc créer un référentiel de «projets mineurs» sur le service d'hébergement, puis utiliser une branche dans ce référentiel pour chaque projet. Si un projet mineur se développe, vous pouvez facilement déplacer la branche vers son propre référentiel.

Localement, vous pouvez soit conserver les branches dans des référentiels locaux séparés (il ne doit pas y avoir de mappage 1: 1 entre les référentiels local et distant) ou avoir un seul référentiel local et utiliser git worktree pour maintenir plusieurs arborescences de travail. Personnellement, je soupçonne que la première approche est moins sujette aux erreurs.

Peter Green
la source
Les avoir stockés dans le même référentiel distant ne signifie pas que vous devez utiliser le même référentiel local.
Peter Green
Oubliez juste mon dernier commentaire. Je viens d'apprendre la git worktreecommande, qui vous permet de créer des arborescences de travail supplémentaires pour un référentiel, vous permettant d'avoir plusieurs branches extraites simultanément. Avec cela, les inconvénients de votre approche disparaissent essentiellement: créez simplement un arbre de travail pour chaque branche indépendante et utilisez-les comme des référentiels indépendants. Ce pourrait être une bonne idée d'ajouter ceci à votre réponse :-)
cmaster - réintégrer monica
@cmaster, c'est fait ...
Peter Green