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:
- 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),
- 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),
- 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)
la source
Réponses:
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.
la source
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 ...
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.
Juste pour clarifier pour les autres (encore une fois, aucune affiliation commerciale à GitHub ou BitBucket):
GitHub: Plans et prix
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.
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:
Ramification?
git-flow
)Je ne sais pas si cela vous aidera, mais vous pouvez jeter un œil à:
... 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.
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
main
branche 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?
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.
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).
---> Voir ma courte réponse ci-dessus. ^^^^^^
la source
Voici ce que je fais:
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.
la source
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.
la source
git worktree
commande, 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 :-)