Qu'est-ce que GitHub? Plus que le contrôle de version Git dans le cloud

GitHub est au cœur d'un service d'hébergement de référentiel Git, c'est-à-dire un système de gestion de code source ou de contrôle de version basé sur le cloud, mais ce n'est que le début. En outre, GitHub implémente des fonctionnalités pour la révision du code (pull requests, diffs et demandes de révision), la gestion de projet (y compris le suivi et l'affectation des problèmes), les intégrations avec d'autres outils de développement, la gestion d'équipe, la documentation et le «codage social».

Quelque chose comme un site de réseautage social pour les programmeurs, GitHub est un environnement ouvert où les programmeurs peuvent partager et collaborer librement (même ad hoc) sur du code open source. GitHub facilite la recherche de code utile, la copie de référentiels pour votre propre usage et la soumission de modifications aux projets des autres. En conséquence, GitHub est devenu le foyer de pratiquement tous les projets open source de toute importance.

Chaque fois que je veux explorer un projet open source, je commence par rechercher le nom du projet. Une fois que j'ai trouvé le site Web du projet, je cherche son lien vers le référentiel de code, et neuf fois sur 10, je me retrouve sur GitHub.

Contrôle de version Git

Avant de pouvoir comprendre ce que fait GitHub et comment fonctionne GitHub, nous devons comprendre Git. Git est un système de contrôle de version distribué, initialement écrit par Linus Torvalds en 2005 pour et avec l'aide de la communauté du noyau Linux. Je ne suis pas ici pour vous vendre sur Git, donc je vous épargnerai le discours sur sa rapidité, sa petite taille, sa flexibilité et sa popularité, mais sachez que lorsque vous clonez un dépôt Git («repo», en abrégé) vous obtenez l'historique complet des versions sur votre propre ordinateur, pas seulement un instantané d'une branche à la fois.

Git a commencé comme un outil de ligne de commande, digne de son origine dans la communauté du noyau Linux. Vous pouvez toujours utiliser la ligne de commande Git, si vous le souhaitez, mais ce n'est pas obligatoire. Au lieu ou en plus de la ligne de commande, vous pouvez utiliser le client GitHub gratuit sur Windows ou Mac, ou l'une des nombreuses autres interfaces graphiques pour Git, ou un éditeur de code qui s'intègre à Git. Toutes ces options sont initialement plus faciles à utiliser que la ligne de commande. La ligne de commande Git est préinstallée sur la plupart des systèmes Mac et Linux et prend en charge toutes les opérations; les interfaces graphiques prennent généralement en charge un sous-ensemble d'opérations Git fréquemment utilisé.

Git est différent des anciens systèmes de contrôle de version tels que Subversion en ce qu'il est distribué plutôt que centralisé. C'est également assez rapide, d'autant plus que la plupart des opérations se déroulent sur votre référentiel local. Néanmoins, l'utilisation de Git ajoute un niveau de complexité: la validation du code dans votre référentiel local et le transfert de vos commits vers un référentiel distant sont des étapes distinctes. Lorsque les équipes oublient cela (ou n'en ont pas été informés), cela peut conduire à des situations où différents développeurs travaillent avec des bases de code qui ont divergé.

Un référentiel Git distant peut se trouver sur un serveur ou sur la machine d'un autre développeur. Cela permet de nombreux flux de travail possibles pour les équipes. Un flux de travail courant consiste à utiliser un référentiel de serveur comme référentiel «béni», dans lequel seul un code révisé et bien testé est engagé, souvent via une pull request émise par le référentiel d'un développeur.

Fonctionnalité GitHub

J'ai déjà noté que GitHub est un serveur Git basé sur le cloud pour l'hébergement de code et le codage social, et qu'il implémente des fonctionnalités pour la révision du code (pull requests, diffs et review requests), la gestion de projet (y compris le suivi et l'attribution des problèmes), intégrations avec d'autres outils de développement, gestion d'équipe et documentation.

La dernière innovation en matière de codage social de GitHub est les co-auteurs de commit , que vous accomplissez en ajoutant une ou plusieurs bandes-annonces «co-rédigées par» à la fin d'un message de commit. Ce mécanisme n'affecte pas le noyau du repo en soi et ne change pas l'apparence du repo sur Git ordinaire, mais sur GitHub, le chrome affichera plusieurs committers dans la liste de commit et donnera à chaque co-auteur le crédit de son. graphique de contribution.

Si vous le souhaitez, vous pouvez étendre GitHub à l'aide de l'API GitHub GraphQL. Il s'agit d'une amélioration significative par rapport à l'ancienne API de GitHub, qui était basée sur des appels REST.

Entreprise GitHub

GitHub.com est un service d'hébergement cloud qui peut gérer une gamme de types de comptes: comptes de développeur gratuits (dépôts publics uniquement) et payants (7 $ par mois), équipes (9 $ par utilisateur et par mois) et entreprises (21 $ par utilisateur et par mois ). Si vous souhaitez exécuter GitHub Enterprise sur site ou dans votre propre instance cloud sur AWS, Microsoft Azure, Google Cloud Platform ou IBM Cloud, vous pouvez le faire pour le même prix de 21 USD par utilisateur et par mois qu'un compte professionnel hébergé. GitHub Enterprise ajoute quelques fonctionnalités utiles, telles que la messagerie intégrée aux utilisateurs et l'approvisionnement d'accès intégré aux annuaires LDAP, mais abandonne le SLA de disponibilité de 99,95% de GitHub.com pour les comptes professionnels hébergés.

GitHub contre Bitbucket

GitHub n'est pas le seul service Git amélioré hébergé et GitHub Enterprise n'est pas le seul produit sur site pour les entreprises. Atlassian Bitbucket est en concurrence avec les deux, avec des prix légèrement inférieurs et un niveau d'équipe gratuit de cinq membres qui comprend des dépôts privés illimités et l'utilisation de Bitbucket Pipelines pour une intégration continue. GitHub est un site plus populaire pour les projets open source et il dispose d'un pool beaucoup plus grand de développeurs open source. La tarification de Bitbucket est plus favorable pour les petites startups.

GitHub contre GitLab

GitLab est en concurrence avec GitHub et Bitbucket, à la fois hébergés et sur site. En apparence, GitLab semble avoir plus de fonctionnalités de cycle de vie que les autres, mais la différence avec Atlassian disparaît principalement si vous incluez Jira lorsque vous évaluez Bitbucket. GitLab offre gratuitement des fonctionnalités cloud de plan Gold aux projets open source, mais cette fonctionnalité supplémentaire ne compense pas vraiment la plus grande communauté de développeurs open source sur GitHub.

Bureau GitHub

GitHub Desktop, illustré ci-dessous, facilite la gestion de vos référentiels GitHub.com et GitHub Enterprise. Bien qu'il n'implémente pas toutes les fonctionnalités de la ligne de commande Git et de l'interface graphique Web GitHub, il implémente toutes les opérations que vous effectuerez quotidiennement à partir de votre bureau tout en contribuant aux projets. En règle générale, vous clonerez des dépôts de GitHub vers GitHub Desktop, les synchroniserez selon vos besoins, créerez des branches pour votre travail, validerez votre travail et inverserez occasionnellement un ou plusieurs commits.

Pour travailler avec des dépôts pour lesquels vous n'avez pas les privilèges de validation et de collaboration, vous commencez généralement par forger le dépôt sur GitHub et cloner le fork sur votre bureau. Ensuite, vous ajoutez toutes les branches dont vous avez besoin dans GitHub Desktop, validez les modifications que vous souhaitez, testez votre travail, repoussez les commits dans votre dépôt distant fourchu et générez enfin une pull request vers le projet parent.

Vous pouvez voir le bouton Pull Request en haut à droite de l'interface de GitHub Desktop. Vous pouvez également voir de nombreux commits dans le projet Neo4j qui étaient des fusions de branches ou des pull requests. C'est typique des projets open source avec peu de committers et de nombreux contributeurs.

Éditeur Atom

Vous pouvez utiliser n'importe quel éditeur de programmation que vous aimez pour modifier le code, y compris l'éditeur Atom gratuit, open source et piratable de GitHub (illustré ci-dessous), qui s'intègre bien avec GitHub et GitHub Desktop. Vous pouvez utiliser Atom sur MacOS, Windows ou Linux. Vous pouvez ouvrir Atom à partir de GitHub Desktop en cliquant avec le bouton droit sur le référentiel que vous souhaitez parcourir ou modifier.

Atom est livré avec environ 90 packages, quatre thèmes d'interface utilisateur et huit thèmes de syntaxe. Vous pouvez ajouter n'importe lequel des 7 000 packages et 2 000 thèmes à votre installation d'Atom. Les packages peuvent prendre en charge des langages de programmation spécifiques, tels que TypeScript, ou ajouter des fonctionnalités, telles que Hydrogen, un environnement de codage interactif qui prend en charge Python, R, JavaScript et d'autres noyaux Jupyter.

Atom est construit avec l'intégration HTML, JavaScript, CSS et Node.js. Il fonctionne sur Electron, un cadre permettant de créer des applications multiplateformes à l'aide des technologies Web. GitHub Desktop fonctionne également sur Electron.

Projets GitHub

Les projets de logiciels open source ont souvent besoin de moyens pour appliquer le contrôle de la qualité tout en acceptant les contributions de l'extérieur de l'équipe principale des committers. Le besoin de contributeurs est énorme, mais intégrer de nouveaux contributeurs au projet tout en maintenant l'intégrité de la base de code est une entreprise difficile et potentiellement dangereuse. Dans le même temps, le besoin de commentaires des utilisateurs du projet est également énorme.

GitHub dispose d'un certain nombre de mécanismes qui peuvent aider à graisser les roues des projets open source. Par exemple, les utilisateurs peuvent ajouter des problèmes au projet sur GitHub pour signaler des bogues ou demander des fonctionnalités. Certains autres systèmes appellent ces tickets . Les chefs de projet travaillant avec des problèmes peuvent générer des listes de tâches, attribuer des problèmes à des contributeurs spécifiques, mentionner d'autres contributeurs intéressés afin qu'ils soient informés des modifications, ajouter des étiquettes et ajouter des jalons.

Pour contribuer à un projet, vous commencez essentiellement à partir d'une branche d'en- tête de rubrique qui contient les modifications validées que vous souhaitez ajouter à la branche de base du projet et initialisez une demande d'extraction à partir de la branche d'en-tête, comme indiqué ci-dessous. Ensuite, vous transmettez vos validations et les ajoutez à la branche du projet. D'autres contributeurs peuvent réviser vos modifications proposées, ajouter des commentaires de révision, contribuer à la discussion sur la demande d'extraction et ajouter leurs propres validations à la demande d'extraction.

Une fois que toutes les personnes impliquées sont satisfaites des modifications proposées, un validateur peut fusionner la demande d'extraction. La fusion peut conserver tous les commits, écraser toutes les modifications en un seul commit ou rebaser les commits de la branche principale dans la branche de base. Si la fusion génère des conflits, vous pouvez les résoudre sur GitHub ou en utilisant la ligne de commande.

Les revues de code sur GitHub permettent à une équipe distribuée de collaborer de manière asynchrone. Les outils GitHub utiles pour les réviseurs incluent les différences (la moitié inférieure de la capture d'écran ci-dessous), l'historique (la moitié supérieure) et la vue des blâmes (un moyen de voir l'évolution d'un fichier commit par commit). Les discussions de code sur GitHub vont dans des commentaires qui sont présentés en ligne avec vos modifications de code. Si les outils intégrés ne suffisent pas pour votre projet, vous pouvez ajouter des outils de révision de code et d'intégration continue à partir du marché GitHub. Les modules complémentaires de Marketplace sont souvent gratuits pour les projets open source.

GitHub gists

Les Gists sont des référentiels GitHub spéciaux pour partager votre travail (public) ou pour enregistrer le travail pour une réutilisation ultérieure (secret). Ils peuvent contenir des fichiers uniques, des parties de fichiers ou des applications complètes. Vous pouvez télécharger des éléments essentiels, les cloner, les diviser et les intégrer.

Des informations essentielles publiques peuvent être découvertes et trouvées dans les recherches. Vous pouvez utiliser des mots-clés pour affiner ce que vous trouvez, y compris des préfixes pour restreindre les résultats aux gists d'utilisateurs spécifiques, aux gists avec au moins N étoiles, aux gists avec des noms de fichiers spécifiques, etc.

Les informations essentielles secrètes ne peuvent pas être recherchées, mais toute personne disposant de l'URL peut les voir. Si vous voulez vraiment que votre code soit protégé, utilisez un référentiel privé.

Comme nous l'avons vu, GitHub fournit des référentiels Git en tant que service, ainsi que des fonctionnalités de révision de code, de gestion de projet, d'intégrations avec d'autres outils de développement, de gestion d'équipe, de codage social et de documentation. Bien que GitHub ne soit pas le seul produit de sa catégorie, c'est le référentiel dominant pour le développement de logiciels open source.