Collaboration à la conception d’applications¶

Git¶

Mise-en-place (aka setup)¶

Installation de git¶

https://git-scm.com/downloads

Vérification¶

▶ git --version
git version 2.42.0

Créer un compte github¶

  • https://github.com/

Ajouter votre nom à git¶

▶ git config --global user.name "Mona Lisa"

Vérification¶

▶ git config --global user.name
Mona Lisa

https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git?platform=windows

Ajouter votre courriel à git¶

▶ git config --global user.email "mona.lisa@louvre.paris"

Vérification¶

▶ git config --global user.email
mona.lisa@louvre.paris

https://docs.github.com/en/get-started/getting-started-with-git/setting-your-username-in-git?platform=windows

Ajouter les alias commun..¶

▶ git config --global alias.co checkout
▶ git config --global alias.br branch
▶ git config --global alias.ci commit
▶ git config --global alias.st status

Vérification.¶

▶ git config --list
alias.ass=add
alias.br=branch
alias.co=checkout
alias.st=status
include.path=/nix/store/471bf9jb0fkh15n8kcjbfsnnak5njp14-hm_gitconfig
color.ui=auto
core.autocrlf=input
core.editor=vi
core.quotepath=false
gui.editor=kate
init.defaultbranch=main
pull.default=current
push.default=current
user.email=didier.amyot@gmail.com
user.name=didier amyot

Générer une clé ssh¶

  • https://docs.github.com/en/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent

  • https://git-scm.com/book/en/v2/Git-on-the-Server-Generating-Your-SSH-Public-Key

Ajouter la clé publique ssh à github!¶

C'est quoi git?¶

Selon le site web officiel¶

Git is a free and open source distributed version control system designed to handle everything

from small to very large projects with speed and efficiency.

Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM

tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.

https://git-scm.com/

Selon wikipedia (anglais)¶

Git (/ɡɪt/)[8] is a distributed version control system that tracks changes in any set of computer files, usually used for coordinating work among programmers who are collaboratively developing source code during software development. Its goals include speed, data integrity, and support for distributed, non-linear workflows (thousands of parallel branches running on different computers)

Logiciel de gestion de versions - wikipedia¶

Un logiciel de gestion de versions (ou VCS en anglais, pour version control system) est un logiciel qui permet de stocker un ensemble de fichiers en conservant la chronologie de toutes les modifications qui ont été effectuées dessus. Il permet notamment de retrouver les différentes versions d'un lot de fichiers connexes.

Objectif¶

  • Savoir qui à changé le code source

  • Savoir quand le code source à changé

  • savoir pourquoi le code source à changé

Objectif (autre point de vue)¶

  1. Travailler ensemble

  2. Garder l'historique du projet

https://youtu.be/2ReR1YJrNOM

Le monde sans Git¶

Travailler en équipe¶

  1. partage le code par courriel ou dropbox

  2. l'historique du projet est gardé dans des fichier zip un peu partout

Reconcilliation du travaille¶

  1. Toute une équipe s'assoit à une table a café en fumant des cigarettes pour "merger le code"

TODO: Travail à merger¶

Walid¶

  • tp_001.zip
  • tp_002.zip
  • tp_003.zip

Haikel¶

  • tp.rar
  • tp_.zip

Manel¶

  • tp.zip
  • tp.1.zip

Git - l'idée géniale¶

On va travailler localement!¶

  1. Toute l'historique du projet sera gardé dans le projet. Un projet sous système de version se nomme un "répository"

  2. On utilisera un outil en ligne de commande git pour

    1. ajouter à l'historique

    2. chercher dans l'historique

    3. merger le répository locale avec d'autres répositories

Un projet git typique¶

projet-koala/
├─ .gitignore
├─ .git/
├─ src/
│  ├─ server.ts
├─ README.md

Mais nous ne sommes pas de anarchistes!¶

origin¶

  • On utilisera Github comme origin

  • Github deviendra le "source of all thruth" pour ce qui est dans le projet

  • Github deviendra la vitrine publique de notre projet

  • Chaque contributeur "pushera" ces changements sur github

  • Chaque contributeur "pullera" les changements des autres de github

Workflow¶

flowchart TD
    A[github]-- Pull/Push ---X[Manel]
    A[github]-- Pull/Push ---Y[Walid]
    A[github]-- Pull/Push ---Z[Haikel]
    A[github]-.- |Pull| U[didier]

Sur Github¶

  • On peut créer des "issues"

  • On peut rouler les unit tests automatiquement.

  • On peut même déployer automatiquement

CI/CD¶

continuous integration (CI) and continuous delivery

flowchart LR
    A[Programmeur]-.-> B["Github"]
    B-- GitHub\nActions -->C["Builder"]
    C-- GitHub\nActions --> D["Tester"]
    D-- GitHub\nActions --> E["Deployer"]

Git - Terminologie¶

Répository¶

  • Un dossier managé par git

  • Le dossier contient un sous dossier .git qui contient tout l'historique

Remote¶

  • Une source du code dans un lieu fort fort lointain (ex: github, gitlab)

  • d'habitude, il y a un seul remote qui se nomme origin

Commit¶

  • Un snapshot complet de tout le répo à un certain temps

  • Est identifié avec un hash

  • Contient le hash des parents

Branch¶

  • On peut travailler sur plusieurs features en parallel sur le même projet.

  • Une branch est un peu comme le commit le plus récent

  • La branche principale se somme usuellement main ou master

HEAD¶

  • Mot que git utilise pour dire "la branche courrante"

  • https://www.cduan.com/technical/git/git-1.shtml#heads

Merge¶

  • Former un nouveau commit à partir de plusieurs commit

  • La pluspart du temps, on merge un branche dans une autre branch

Git - Les commandes git de base¶

git clone <url>¶

  • Sert à cloner une projet.

  • Ça prend une copie complète d'un projet avec tout l'historique

On fait des changements¶

  • Parce que nous aimons cela!

  • Parce que c'est nécessaire

git status (git st)¶

  • On regarde l'état du répo local

  • On voit tous les changements

  • On peut utiliser git diff pour regarder les changements avec

git add <...files>¶

  • Les changements que nous voulons sauvegarder

  • Ici, nous ne "committons" pas encore les changements

  • Nous dissons, "Je pense que je devrait sauvegarder cela"

  • Les changements ajoutés sont dans le "staging area"

git commit -m "<Le message du commit>"¶

  • Là nous demandons à git de sauvegarder nos changements

  • Tous les changements "stagés"

git push¶

  • on upload nos changements sur un remote

  • on peut uploader nos sur une autre branche ou un autre remote avec git push <remote-name> <branch-name> (git push origin master)

Branches¶

C'est quoi une branche?¶

  • On peut travailler sur plusieurs features en parallel sur le même projet.

  • Une branch est un peu comme le commit le plus récent

  • La branche principale se somme usuellement main ou master

Créer une branch¶

  • Céer sur une nouvelle branche & change le "HEAD" sur la branch
git switch -c <branch-name>

Méthode pour les vieux¶

git checkout -b <branch-name>

Git status¶

  • git status met en évidence la branche sur laquel nous nous trouveons

Merger une branch¶

git merge <branch-name>

Pour merger une branche "remote"¶

git merge origin/<branch-name>

Merge conflicts¶

Lors d'un merge, si deux branches changent la même section¶

  1. Il y a une "merge conflict"

  2. C'est à vous de résoudre le conflit

Exemple d'un conflit¶

  • Des fois, c'est très difficil à faire