- Une page de guide qui propose des versions HTML et PDF en plusieurs formats pour les lecteurs souhaitant apprendre Git ou s’y référer
- Le guide part du principe qu’il peut contenir des erreurs ; les corrections concernant des informations Git erronées sont acceptées par e-mail
- Les versions HTML peuvent être choisies selon l’environnement de lecture : version découpée, page unique, widescreen, ZIP, etc.
- Les PDF sont téléchargeables en combinaisons US Letter ou A4, recto ou recto verso, avec coloration syntaxique ou en noir et blanc
- Les traducteurs et auteurs peuvent cloner l’ensemble des ressources depuis GitHub, puis travailler en suivant le README
Formats de distribution pour la lecture
-
HTML
-
PDF
Suggestions de correction et ressources de travail originales
- Le guide laisse ouverte la possibilité qu’il contienne des erreurs, et les suggestions de correction sont reçues par e-mail
- Les traducteurs et auteurs peuvent cloner le dépôt GitHub et suivre le README
1 commentaires
Avis sur Hacker News
Si vous trouvez une erreur, signalez-la. Je ferai le tri et corrigerai moi-même — Beej
:cqmérite aussi d’être mentionné. Cela permet de quitter avec un code de sortie non nul, afin d’empêcher Git de terminer le commit ou l’opération en coursDans https://beej.us/guide/bggit/html/split/branches-and-fast-for..., il est dit que « la branche par défaut est main » et qu’« autrefois c’était master, et certains anciens dépôts ont encore master », mais ce n’est pas exact. Git utilise toujours
masterpar défaut, et permet simplement de changer cela pour les futursgit initviagit config --global init.defaultBranchSource : https://github.com/git/git/blob/bc204b742735ae06f65bb20291c9...
De plus, parler d’« anciens dépôts » envoie un mauvais message. C’est GitHub qui a décidé ce changement, d’autres ont suivi, et Git lui-même a fini par autoriser le réglage mentionné plus haut ; ce n’est donc pas vraiment une question de dépôts récents ou anciens, mais plutôt de préférence
C’est un bon moyen de garder des branches bien séparées sans avoir à gérer les complications de stash
Beej's Guide to Network Programming et Beej's Guide to Unix IPC, que j’ai lus ado, étaient à la fois accessibles et profonds, et ont beaucoup influencé le programmeur que je suis devenu par la suite
[0] https://beej.us/guide/bgnet/
[1] https://beej.us/guide/bggit/
J’avais acheté d’occasion Slackware Linux Unleashed avec son CD-ROM, qui contenait des exemples de réseau en C ; comme ce code me laissait perplexe, j’ai fini par trouver le site de Beej sur le réseau. De là, je me suis enfoncé encore plus profondément dans le terrier du lapin, et je faisais le tour des librairies pour trouver des livres de programmation
Après avoir acheté l’excellent ouvrage de référence de Richard Stevens, je n’ai jamais regardé en arrière, et je suis encore reconnaissant à Beej d’avoir rendu cette passion possible
select, parce que je voulais rendre un scanner de ports, peut-être « grabb » ?, plus rapide. C’était le bon tempsC’était l’époque où je sauvegardais les pages pour les lire hors ligne afin que mon père ne s’énerve pas à cause de la facture de téléphone ; quand le code fonctionnait, cela ressemblait à une validation qui faisait oublier les échecs et rejets précédents de la vie. Le plaisir d’envoyer un message d’un ordinateur à un autre était immense
En voyant « ancienne commande :
git checkout», je ne savais même pas quegit switchexistait, ni quegit checkoutétait considéré comme une vieille alternative. Je me sens vieuxJ’ai commencé à apprendre Git il y a presque 10 ans, donc soit, mais c’est étrange de se dire que quelqu’un qui apprend Git aujourd’hui pourrait être dérouté par le fait que j’utilise
git checkout. J’ai l’impression d’employer une tournure démodéePour revenir au texte, ce guide m’aurait été vraiment utile quand j’apprenais. Il est facile à suivre et couvre bien les questions courantes
Je garde aussi un bon souvenir du moment où mon premier conflit de merge m’a fait peur au point que j’ai arrêté, puis où j’ai contourné les choses pour éviter les conflits
git switchest une commande assez récente, publiée pour la première fois en 2019Il y a eu une discussion en 2021 et une autre il y a quelques semaines ; dans cette dernière, il est aussi indiqué que, dans la documentation,
git switchest encore considéré comme une fonctionnalité expérimentalehttps://news.ycombinator.com/item?id=28024972
https://news.ycombinator.com/item?id=42649858
git checkoutest déjà considéré comme une « vieille alternative ». La dernière fois que j’ai vérifié,switchétait toujours expérimental, et je n’ai jamais envisagé de m’éloigner du workflow et des commandes que j’ai appris il y a environ 15 ans avec GitTout ce que je veux faire fonctionne toujours de la même façon,
git checkoutfait encore ce qu’il faisait avant, et je n’ai aucun problème à collaborer avec d’autres personnes via Git ; je ne vois donc pas pourquoi je changerais de workflowLe simple fait qu’il faille un guide en plus de 30 parties pour expliquer comment utiliser Git donne l’impression que Git est passé à côté de la vue d’ensemble
Un commit est un instantané d’un arbre, avec une liste d’ancêtres. En général un seul, mais pas toujours. Un tag est une étiquette immuable pour un commit, et une branche est une étiquette mutable pour un commit. L’index est une sorte de petit proto-commit en cours, qu’on remplit avec
addavant de committerVoilà Git. Si vous voulez en savoir plus, ne lisez pas un guide : cherchez plutôt des choses comme « comment passer à un commit Git précis sans affecter l’arbre », « comment committer seulement une partie des fichiers modifiés », ou « comment copier dans l’arbre courant un commit venu d’ailleurs »
Les abstractions de base sont minimalistes et simples. Ce que vous voulez faire avec ces abstractions est sophistiqué et complexe. Apprenez les premières et cherchez les secondes, il n’est pas nécessaire de lire un guide
git clone,git checkout,git pull,git add+commit+push,git reset/rebaserebase -iindique quelle commande fait quoi, et quelques paragraphes suffisent pour expliquer comment formater la sortie degit logselon ses préférences et compromis. On considère généralement que les commandes utilisateur incluent aussi des choses assez diverses commegit gc,git fsckougit rev-parseLes commandes de bas niveau sont clairement plus obscures, et font en elles-mêmes beaucoup de choses qu’on ne peut pas toujours accomplir facilement avec les commandes utilisateur optimisées pour les cas d’usage courants
En résumé, Git est gros, voire énorme, mais pour la plupart des développeurs, une grande partie de ce qu’il offre se trouve loin du chemin principal
Ce qui fait peur, c’est la longueur du guide
Je sais que les guides de Beej sont en général exhaustifs, mais je n’avais pas vraiment pris la mesure de l’immense quantité de subtilités de Git avant de voir ça
Avec Jujutsu, ce serait probablement un guide beaucoup plus mince, ou au moins un guide où l’on pourrait apprendre plus facilement par découverte progressive
J’ai l’impression que ce guide ne couvre qu’environ 10 % de Git, mais j’espère qu’il couvre 90 % des usages courants
Au travail, une ou deux fois par an, j’anime une introduction au modèle de données de Git de 2 heures
On va réellement dans le répertoire
.git, on décompresse les fichiers et je montre que tout n’est qu’une représentation en texte clair des structures de données de base. Voir le moment où les gens comprennent enfin dans leur tête est vraiment génialOn partage aux nouveaux arrivants un document de recettes Git de base pour qu’ils puissent commencer à committer du code, mais la plupart se contentent de le suivre sans comprendre ce qui se passe
En revanche, les personnes qui ont suivi le cours, même si elles ne connaissent pas toutes les commandes, ont une compréhension opérationnelle assez raisonnable de ce qui se passe réellement dans Git. Les commandes se cherchent facilement ; si le modèle mental est correct, les commandes elles-mêmes ne sont pas un gros problème. Pourtant, presque toutes les discussions sur Git dans HN finissent par parler de ligne de commande
Fait intéressant, ce cours ressemble au texte alternatif de https://xkcd.com/1597/. La différence, c’est que pour un public technique, c’est effectivement la bonne manière d’enseigner Git, et qu’une fois qu’on l’a compris, on acquiert une compréhension de base qu’on n’oublie pas
Honnêtement, le retour sur investissement en temps est tellement élevé que je trouve étrange de ne pas le faire
Dans la dernière diapositive de la présentation, j’avais mis des questions auxquelles mes collègues devaient répondre à partir du modèle de données de Git. Par exemple : « peut-on déplacer un commit vers une autre branche ? », « qu’est-ce qui garantit qu’il n’y a pas de cycle dans le graphe des commits ? »
C’était vraiment satisfaisant de voir les gens ne pas se contenter d’utiliser Git, mais penser Git
Heureusement, j’ai vu assez tôt une vidéo qui expliquait une partie du modèle interne de Git, et j’ai constaté qu’en réalité il n’est pas nécessaire d’avoir des connaissances internes si nombreuses ou si profondes pour que cela fasse une grande différence. Comprendre ne serait-ce qu’environ 5 % du fonctionnement de Git m’a permis de bien mieux comprendre ce que font les commandes et comment les utiliser
S’il était basé sur des ressources publiques et suffisamment concises pour tenir en 2 heures, ce serait bien de les partager dans ce fil ou dans l’article HN. Je pense que plus il existe de supports d’apprentissage sur un même sujet avec des présupposés, des analogies et des angles différents, mieux c’est
Je sais à peu près gérer le flux courant de Git, les merges, les rebases, etc., mais plutôt que d’essayer de devenir meilleur avec Git, j’envisage sérieusement de passer à jujutsu.
jjest compatible avec Git, et je peux l’utiliser de mon côté pendant que mes collègues continuent simplement à utiliser GitJ’ai l’impression qu’il y a une astuce que beaucoup de guides et la plupart des interfaces graphiques Git passent à côté. À titre d’exception, magit la traite bien
Il s’agit de définir la branche upstream non pas sur
origin/feature/foopourfeature/foo, mais sur la cible vers laquelle on veut fusionner, c’est-à-dire la branche d’intégrationmasterouorigin/masterCela simplifie beaucoup de choses. Quand on lance
git status, il indique à quel point on a divergé de la branche d’intégration, ce qui est utile, et si l’on lancegit rebasesans argument, on est directement rebasé au-dessus de l’upstreamAvoir
origin/feature/foocomme upstream est moins utile. Les développeurs « possèdent » en général aussi leur propre branche distante, donc savoir à quel point on a divergé de celle-ci n’a pas vraiment d’intérêt, et on n’a pas non plus de raison de vouloir se rebaser dessusSi l’on définit
push.defaultsur"current",git pushpousse aussifeature/fooversorigin/feature/foocomme attenduJe me demande pourquoi cette configuration n’est pas plus répandue
La section sur la collaboration ne traite pas du tout des branches de fonctionnalité. Il me semble pourtant que c’est un mode de travail assez courant
Ce serait utile de la comparer à la méthode du guide où « chacun utilise sa propre branche ». Par ailleurs, dans la section 17, il vaudrait la peine d’aborder la réutilisation d’une branche pour les pull requests GitHub par rapport à la création d’une nouvelle branche pour chaque PR
Je n’ai pas encore vérifié l’article, mais il a l’air bon. Autre recommandation : le cours Git de boot.dev, enseigné par Primeagen
Il est interactif et va assez loin, jusqu’à manipuler directement les fichiers dans le répertoire
.git. Après l’avoir suivi, j’ai acquis un modèle mental complètement nouveau du fonctionnement de Git