Le contrôle de version, Git et le postmodernisme : pourquoi Microsoft a acheté GitHub pour 7.5 milliards de dollars

Assez tôt, les programmeurs ont compris qu'ils avaient besoin non seulement de stocker des fichiers, mais aussi de garder une trace des différentes versions d'un fichier donné. Les fonctions de bases que permet le contrôle de version est le retour en arrière, la présence d'un log historique qui permet de documenter les modifications effectuées.

Un de premiers outils à cette fin fut le Source Code Control System (SCCS), développé par Rochkind au sein des laboratoires Bell en 1972.

La plupart des systèmes de type Unix, ainsi que des mainframes ont utilisés un outil de gestion des versions depuis. Il en existe plusieurs dont CVS, subversion. Sur les PC, plusieurs outils similaires furent développés dont Visual SourceSafe.

Depuis plusieurs versions destinées au grand public furent développées tel que DropBox.

Git a été publié en 2005 Linus Torvalds, l'auteur du noyau Linus fréquemment utilisé par les serveurs sur Internet. Torvalds cherchait à résoudre un problème de gestion du code source Linus. Git est devenu l'outil de gestion de versions dominant. Il a été adopté notamment par Google, Microsoft, etc. Il s'agit de logiciel libre.

Plusieurs entreprises offrent des services basés sur Git dont GitHub. Fondé en 2008, GitHub compte près de 30 million d'utilisateurs. En 2018, Microsoft a acquis GitHub pour 7.5 milliards de dollars .

  1. Git est distribué. Contrairement à plusieurs systèmes qui ont précédés comme CSV, il n'y a pas de serveur central unique. Par exemple, bien que plusieurs utilisateurs s'en remette à GitHub comme centre de coordination, votre copie locale peut être rattachée à n'importe quel remote et on peut même le rattacher à plusieurs remote. En ce sens, git est fondamentalement postmoderniste: il n'y a pas une seule version de la vérité.
  2. Git est efficace et rapide, même pour des projets énormes. Les systèmes comme CVS et subversion pouvaient devenir inefficaces et prendre plusieurs minutes pour effectuer certaines opérations. Il faut préciser que la mise en oeuvre de Git s'est améliorée davantage et inclus maintenant des index (par ex. WAH et Roaring).
  3. Git est extrêmement robuste et ne se « corrompt » pas facilement.

Architecture

  1. L'unité de base logique du Git est le commit qui est un ensemble de modifications sur plusieurs fichiers. Un commit comprend notamment une référence à au moins un parent. (Exception: le premier commit dans un repo. n'a pas de parent!) Habituellement, un commit n'a qu'un seul parent.
  2. Les commits forment un graphe dirigé acyclique. Les commits sont identifiés entilisant un hash (921103db8259eb9de72f42db8b939895f5651489)qui prend en compte le date et l'heure, le commentaire, le nom de l'utilisateur, les parents, la nature du changement.
  3. On peut travailler sur un fichier, mais tant qu'on n'a pas effectué un commit, les modifications ne vont pas dans la base de données immutable Git.
  4. Un même commit peut avoir plusieurs enfants (notamment dans le cas où on emploie des branches). En effet, il est fréquent d'explorer plusieurs possibilités ou de travailler dans différentes directions à partir d'un même code source.
  5. Les commit peuvent à tout moment être poussés vers un (ou plusieurs) remote à partir d'où d'autres utilisateurs peuvent y avoir accès.
  6. On peut synchroniser sa version avec un remote à l'aide d'un fetch suivi d'un merge (aussi appelé un pull). Le merge créé un nouveau commit ayant deux ou plusieurs parents.

Fork me

  1. Étant donné un répertoire Git publiquement disponible, n'importe qui peut le cloner et commencer à y travailler et y contribuer.
  2. On peut créer un nouveau remote, une opération qu'on appelle un fork.
  3. À partir d'un fork, on peut soumettre un pull request qui invite les gens à intégrer nos changements.

Cela permet une forme d'innovation sans permission !

Adria Richards forking story:

My friends and I had decided forking someone’s repo is a new form of flattery (the highest form being implementation) and we were excited about one of the presenters projects; a friend said “I would fork that guys repo” The sexual context was applied by Adria, and not us.

Blame

La commande git blame permet de savoir qui a touché pour la dernière fois à un bout de text donné.

Tag

Vous pouvez donner un nom de votre choix à un commit, par exemple version 1.0.

Utilisabilité

  1. On utilise souvent git en ligne de commande. Il est possible d'utiliser des clients, mais il faut quand même comprendre l'architecture git. Des services comme GitHub rendent git un peu plus facile.
  2. Il y a une distinction entre commit et push.
  3. Les commits sont indentifiés à l'aide d'une valeur hachée en hexadécimal (40 octets). Bien qu'un préfixe suffit, c'est quand même techniquement intimidant.
  4. En cas de problème, git suppose que vous savez ce que vous faites!

Et Microsoft?

Pendant des années, Microsoft a pris les programmeurs pour acquis. Ceux-ci devaient gagner leur vie, et pour le faire, ils devaient travailler avec les outils Windows. C'est ainsi que Microsoft a maintenu un des pires navigateurs web (du point de vue des programmeurs) en existence (Internet Explorer). Dans une ère où l'informatique mobile (iOS et Android) et l'infonuagique (Linux) domine, Microsoft ne peut plus se permettre ce luxe. L'échec du Windows Phone l'illustre bien : pas de programmeurs, pas produit, pas de vente. GitHub est actuellement au centre même de la vie de millions de programmeurs. Même les pire régimes totalitaires ne peuvent bloquer GitHub. Cela vaut plusieurs milliards de dollars.

Conclusion

En 2018, si vous développez du code sans utiliser Git ou l'équivalent, vous envoyez comme signal que vous ne savez pas ce que vous faites en ce qui a trait au développement logiciel.