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 .
- 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é.
- 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).
- Git est extrêmement robuste et ne se « corrompt » pas facilement.
Architecture
- 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.
- 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.
- 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.
- 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.
- Les commit peuvent à tout moment être poussés vers un (ou plusieurs) remote à partir d'où d'autres utilisateurs peuvent y avoir accès.
- 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
- Étant donné un répertoire Git publiquement disponible, n'importe qui peut le cloner et commencer à y travailler et y contribuer.
- On peut créer un nouveau remote, une opération qu'on appelle un fork.
- À 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é
- 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.
- Il y a une distinction entre commit et push.
- 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.
- 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.