Taille: 1964
Commentaire: page canonique : contenu initial provenant de dernier atelier dispensé
|
Taille: 6960
Commentaire:
|
Texte supprimé. | Texte ajouté. |
Ligne 15: | Ligne 15: |
* Pourquoi versionner? * historique : voir versions passées * expérimentation : explorer une nouvelle version possible * travail collaboratif : travail sur versions en parallèle (en local, sur branches...) puis fusion des versions * Pourquoi Git? * nouvelle génération * distribué (local, hors-ligne) |
|
Ligne 21: | Ligne 28: |
* .gitignore : suivre le modèle * git init * git status * git add |
* créer un répertoire en local et s'y déplacer {{{ mkdir atelier cd atelier }}} * initialiser un dépôt vierge {{{ git init }}} * .git créé = tout le dépôt en local * vérifier l'état du dépôt {{{ git status }}} * créer du contenu (un répertoire et un fichier) sous {{{atelier}}} * créer le fichier caché commandant à git d'ignorer certains fichiers ou répertoires * {{{.gitignore}}} : suivre le modèle * ajouter les fichiers et répertoires à l'index de git {{{ git add . }}} |
Ligne 26: | Ligne 50: |
* git commit * gitk |
* engager ses changements {{{ git commit -a -m "message de commit" }}} * vérifier le journal des commits {{{ git log }}} * vérifier l'historique des versions (commits) {{{ gitk }}} == INTERFACE WEB DU SERVEUR == * projets * shortlog * liste de commits * tag master = head master * commit * hash identifiant commit et son parent * diff, blob, (blame), history (+ diff to current) * commitdiff * tree : l'arborescence des sources (web) * snapshot : les sources (téléchargement) * heads (= branches) |
Ligne 31: | Ligne 79: |
* Initialiser un dépôt git * git config * git push * Récupérer localement un dépôt git existant sur serveur (pas encore récupéré) * git clone * git config |
* Initialiser un dépôt git sur le serveur ('''pas fait dans l'atelier''') * configurer en local l'URL où sera le dépôt sur serveur {{{ git config remote.origin.url ssh://gitosis@git.auf/atelier }}} * pousser sur le serveur son code local {{{ git push origin master }}} * Récupérer localement un dépôt git existant sur serveur (qui n'a pas encore été récupéré) {{{ git clone ssh://gitosis@git.auf/espace-formation }}} |
Ligne 40: | Ligne 95: |
* Éditer l'arboresence du projet * git status * git add * git rm * git commit * git pull * git push |
* vérifier l'état du dépôt local {{{ git status }}} * tirer en local la dernière version du serveur {{{ git pull }}} * éditer l'arborescence du projet * au besoin, ajouter les fichiers et répertoires à l'index de git {{{ git add . }}} * au besoin, supprimer des fichiers ou répertoires de l'index de git {{{ git rm nom_fichier }}} * engager ses changements {{{ git commit -a -m "message significatif de commit" }}} * s'assurer d'avoir la dernière version avant de pousser {{{ git pull }}} * pousser sa nouvelle version locale sur le serveur {{{ git push }}} == EXERCICE TRAVAIL COLLABORATIF == * S'assurer d'avoir cloné le dépôt {{{espace-formation}}} * Ajouter un fichier portant votre prénom à la racine du projet : ex.: {{{thomas.txt}}} * Commiter la modification * Pusher le commit sur le serveur * Puller la dernière version du serveur * Modifier le fichier indiqué par le présentateur de l'atelier * Commiter, pusher * Réglet un conflit : * Éditer la ligne du fichier indiqué par le présentateur de l'atelier * Essayer de pusher à son signal * Puller à son signal * Régler le conflit (édition version finale voulue) * Commiter, pusher |
Ligne 50: | Ligne 143: |
Des branches pour faire évoluer le code en parallèle... Ex.: pour expérimenter (nouvelle fonctionnalité) ou gérer différents degrés de maturé du code (workflow de développement) * Lister les branches ''Branche en cours = précédée d'astérisque'' * locales {{{ git branch }}} * distantes (remotes) {{{ git branch -r }}} * toutes (all) {{{ git branch -a }}} |
|
Ligne 51: | Ligne 162: |
* git fetch * git branch |
* créer branche neuve à partir du commit en cours {{{ git branch mabranchelocale }}} * créer branche en local à partir du serveur {{{ git branch mabranchelocale -t labrancheserveur }}} |
Ligne 54: | Ligne 171: |
* git push | {{{ git push origin labrancheserveur }}} * Configurer la branche {{{ git config branch.mabranchelocale.remote origin git config branch.mabranchelocale.merge refs/heads/mabrancheserveur }}} |
Ligne 56: | Ligne 180: |
* git checkout | {{{ git checkout verscetteautrebranche }}} ''Se lit: "Je fais le checkout de la branche en cours pour aller vers cette autre branche"'' |
Ligne 58: | Ligne 185: |
* git merge | {{{ git merge cetteautrebrancheici }}} ''Se lit: "Je fusionne ici la branche en cours avec cette autre branche"'' * Fusion pas symétrique : ''(branche1) git merge branche2 '''≠''' (branche2) git merge branche1'' |
Ligne 61: | Ligne 193: |
* git branch | {{{ git branch -d mabranchelocale }}} |
Ligne 63: | Ligne 197: |
* git push | {{{ git push :labrancheserveur }}} == EXERCICE BRANCHES == * Vérifier qu'aucune branche n'existe sur le serveur nommée avec votre prénom * Créer une branche locale perso nommée avec votre prénom (ou autre si existe déjà) : ex.: thomas * Mettre cette nouvelle branche sur le serveur * Configurer votre branche pour pouvoir puller et pusher directement (sans ajouter ''origin labrancheserveur'') * Attendre les instructions du ''release manager'' (ici = présentateur) pour fusionner la branche master à jour dans votre branche perso * Mettre à jour votre branche perso sur le serveur * Copier en local la branche d'un collègue * Fusionner la branche du collègue avec la vôtre * Mettre à jour votre branche perso sur le serveur |
Ligne 81: | Ligne 229: |
''Convention : la branche '''master''' fait toujours autorité.'' |
|
Ligne 87: | Ligne 237: |
* Aller plus loin : * Participer aux projets * de l'AUF : [[http://git.auf.org|Dépôt AUF]] * d'autres projets Open source : [[https://github.com/|GitHub]] * Explorer au besoin le [[http://git-scm.com/documentation|Site officiel]], notamment sa [[http://git-scm.com/documentation|documentation]] ---- |
Git : versionner ses sources
Sommaire
INTRODUCTION
- Objectifs :
- connaître les commandes de base pour participer à un projet AUF
- Environnement technique :
- git-core
- gitk
- Pourquoi versionner?
- historique : voir versions passées
- expérimentation : explorer une nouvelle version possible
- travail collaboratif : travail sur versions en parallèle (en local, sur branches...) puis fusion des versions
- Pourquoi Git?
- nouvelle génération
- distribué (local, hors-ligne)
VERSIONNER EN LOCAL
- Initialiser un dépôt git
- créer un répertoire en local et s'y déplacer
mkdir atelier cd atelier
- initialiser un dépôt vierge
git init
- .git créé = tout le dépôt en local
- vérifier l'état du dépôt
git status
créer du contenu (un répertoire et un fichier) sous atelier
- créer le fichier caché commandant à git d'ignorer certains fichiers ou répertoires
.gitignore : suivre le modèle
- ajouter les fichiers et répertoires à l'index de git
git add .
- créer un répertoire en local et s'y déplacer
- Amorcer le suivi
- engager ses changements
git commit -a -m "message de commit"
- vérifier le journal des commits
git log
- vérifier l'historique des versions (commits)
gitk
- engager ses changements
INTERFACE WEB DU SERVEUR
- projets
- shortlog
- liste de commits
- tag master = head master
- commit
- hash identifiant commit et son parent
- diff, blob, (blame), history (+ diff to current)
- commitdiff
- tree : l'arborescence des sources (web)
- snapshot : les sources (téléchargement)
- heads (= branches)
VERSIONNER SUR SERVEUR
Initialiser un dépôt git sur le serveur (pas fait dans l'atelier)
- configurer en local l'URL où sera le dépôt sur serveur
git config remote.origin.url ssh://gitosis@git.auf/atelier
- pousser sur le serveur son code local
git push origin master
- configurer en local l'URL où sera le dépôt sur serveur
- Récupérer localement un dépôt git existant sur serveur (qui n'a pas encore été récupéré)
git clone ssh://gitosis@git.auf/espace-formation
PROCESSUS DE VERSIONNAGE
- vérifier l'état du dépôt local
git status
- tirer en local la dernière version du serveur
git pull
- éditer l'arborescence du projet
- au besoin, ajouter les fichiers et répertoires à l'index de git
git add .
- au besoin, supprimer des fichiers ou répertoires de l'index de git
git rm nom_fichier
- engager ses changements
git commit -a -m "message significatif de commit"
- s'assurer d'avoir la dernière version avant de pousser
git pull
- pousser sa nouvelle version locale sur le serveur
git push
EXERCICE TRAVAIL COLLABORATIF
S'assurer d'avoir cloné le dépôt espace-formation
Ajouter un fichier portant votre prénom à la racine du projet : ex.: thomas.txt
- Commiter la modification
- Pusher le commit sur le serveur
- Puller la dernière version du serveur
- Modifier le fichier indiqué par le présentateur de l'atelier
- Commiter, pusher
- Réglet un conflit :
- Éditer la ligne du fichier indiqué par le présentateur de l'atelier
- Essayer de pusher à son signal
- Puller à son signal
- Régler le conflit (édition version finale voulue)
- Commiter, pusher
BRANCHES
Des branches pour faire évoluer le code en parallèle...
Ex.: pour expérimenter (nouvelle fonctionnalité) ou gérer différents degrés de maturé du code (workflow de développement)
- Lister les branches
Branche en cours = précédée d'astérisque
- locales
git branch
- distantes (remotes)
git branch -r
- toutes (all)
git branch -a
- locales
- Créer en local
- créer branche neuve à partir du commit en cours
git branch mabranchelocale
- créer branche en local à partir du serveur
git branch mabranchelocale -t labrancheserveur
- créer branche neuve à partir du commit en cours
- Créer sur serveur
git push origin labrancheserveur
- Configurer la branche
git config branch.mabranchelocale.remote origin git config branch.mabranchelocale.merge refs/heads/mabrancheserveur
- Changer de branche
git checkout verscetteautrebranche
Se lit: "Je fais le checkout de la branche en cours pour aller vers cette autre branche"
- Fusionner les branches
git merge cetteautrebrancheici
Se lit: "Je fusionne ici la branche en cours avec cette autre branche"
- Fusion pas symétrique :
(branche1) git merge branche2 ≠ (branche2) git merge branche1
- Fusion pas symétrique :
- Conflits
- Supprimer en local
git branch -d mabranchelocale
- Supprimer sur serveur
git push :labrancheserveur
EXERCICE BRANCHES
- Vérifier qu'aucune branche n'existe sur le serveur nommée avec votre prénom
- Créer une branche locale perso nommée avec votre prénom (ou autre si existe déjà) : ex.: thomas
- Mettre cette nouvelle branche sur le serveur
Configurer votre branche pour pouvoir puller et pusher directement (sans ajouter origin labrancheserveur)
Attendre les instructions du release manager (ici = présentateur) pour fusionner la branche master à jour dans votre branche perso
- Mettre à jour votre branche perso sur le serveur
- Copier en local la branche d'un collègue
- Fusionner la branche du collègue avec la vôtre
- Mettre à jour votre branche perso sur le serveur
WORKFLOW DE DÉVELOPPEMENT
- Développement (branch dev, environnement DEV)
- développement dans environnement DEV (local)
branche dev : code stable développé
- validation informatique du release
- Tests (branch test, environnement TEST)
- merge de branche dev dans la branch test
branche test : code stable à tester par responsables métier
- déploiement dans environnement de TEST (serveur, identique à PROD)
- validation métier du release
- Production (branch master, environnement PROD)
- merge de branch test dans la branch master
branch master : code stable validé
- déploiement dans environnement de PROD
- utilisation par utilisateurs finaux
Convention : la branche master fait toujours autorité.
CONCLUSION
- Tout projet doit être versionné sur le dépôt central (privé ou public)
- Aller plus loin :
- Participer aux projets
Explorer au besoin le Site officiel, notamment sa documentation