================
GIT (versioning)
================
Les liens utiles
================
:liens WEB:
* https://git-scm.com/book/fr/v1/D%C3%A9marrage-rapide-%C3%80-propos-de-la-gestion-de-version
* https://git-scm.com/book/en/v2
* https://www.youtube.com/watch?v=rP3T0Ee6pLU&list=PLjwdMgw5TTLXuY5i7RW0QqGdW0NZntqiP
# Chaine youtube en français sur l'utilisation de GIT
* https://youtu.be/V6Zo68uQPqE
# Cours complet un peu long mais en français en claire
* https://git-scm.com/doc
# documentation
* https://www.nano-editor.org/dist/v2.2/NT/
# nano
* https://alexgirard.com/git-book/
# 'Livre' en français
* http://www.formation-lpi.com/IMG/pdf/mind-map-git.pdf
# MindMap (memento)
------------------------------------------------------------------------------------------
Configurer GIT
==============
#. Les options de base pour la configuration
::
git config --global user.name "votre_pseudo"
git config --global user.email moi@email.com
# on commence par configurer son nom (user.name)
# puis son adresse Email (user.email)
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
# Les 3 lignes permettent de mettre le shell en couleur
#. Pour vérifier la configuration
::
git config --list
#. Remplacer VI par Nano
- `Télécharger Nano. `_ et l'installer
dans "C:\Program Files (x86)"
- Ajouter le chemin de Nano dans le path
- Ouvrir une invite de commande et tapez
::
git config --global core.editor nano.exe
------------------------------------------------------------------------------------------
Obtenir de l'aide
=================
#. les commandes de bases intégrée a git
::
git help
git help
git --help
man git-
------------------------------------------------------------------------------------------
Démarrer un dépôt Git
=====================
#. Initialisation d'un dépôt Git dans un répertoire existant
::
git init
------------------------------------------------------------------------------------------
gitignore
=========
:Liens_Web:
* https://fr.atlassian.com/git/tutorials/saving-changes/gitignore
# Description de la syntaxe à utiliser pour '.gitignore'
------------------------------------------------------------------------------------------
Enregistrer des modifications dans le dépôt
===========================================
#. Vérifier l'état des fichiers
::
git status
#. Ajouter les données
::
git add *
#. faire un commit
::
git commit -am "votre commentaire"
------------------------------------------------------------------------------------------
Créer, lister et sélectionner une branche
=========================================
#. Pour lister une branche
::
git branch
# la branch ayant un asterics est la branche courante
#. Pour connaitre la branch avtive
::
git symbolic-ref HEAD --short
#. Pour créer une nouvelle branch
::
git branch [nom de la branch]
#. Pour sélectionner et se déplacer sur une branche
::
git checkout [nom de la branch]
#. Pour importer des fichiers depuis une autre branch.
::
git chekout [branch] [fichier cible]
#. Pour créer une nouvelle branch et basculer directement dessus
::
git checkout -B [Nom de la nouvelle branch]
#. Pour lister les fichiers tracker : ::
git ls-files
#. Pour lister les fichiers non tracker : ::
git ls-files --others
ou en version courte :
git ls-files -o
------------------------------------------------------------------------------------------
appliquer le contenu d'une branch dans la branch courante (faire un merge)
==========================================================================
#. Se placer sur la branche de destination
::
git checkout [branch cible]
# ex : git checkout master
#. Lancer la commande "merge" en prenant comme argument la branch a appliquer
::
git merge [branch_a_appliquer]
# ex : git merge dev
Copier seulement un fichier depuis une autre branch dans la branch courante
---------------------------------------------------------------------------
#. Faire un chekout du ficher dans la branch courante ::
git checkout [branch_source] [chemin/du/fichier]
ex:
git branch
crash_test
dev_jojo
* dev_pierre
master
git checkout dev_jojo js/main.js
------------------------------------------------------------------------------------------
supprimer des éléments
======================
#. Supprimer un fichier du repository (de l'index, mais pas du dossier de travail)
::
git rm --cached [nom_du_fichier]
#. supprimer un dossier du repository (de l'index, mais pas du dossier de travail)
- On commence par l'exclure à laide de '.gitignore' ::
## gitignore
## files
...
## dir
path_to_my_folder/
- on le supprime ensuite de la même façon qu'un fichier ::
git rm -r --cached path_to_my_folder/
#. supprimer tous le cache
::
git rm -r --cached .
# ne pas oublier le point
#. réparer l'index si un fichier est supprimer du dossier de travail mais pas de l'index
::
git reset
#. supprimer une branch ::
git branch -D [nom_de_la_branch]
# l'option '-D' est l’équivalent de --delete --force
------------------------------------------------------------------------------------------
faire un "instantané" puis le libérer
=====================================
#. faire un instantané ::
git stash push
#. Obtenir la list des stash ::
git stash list
#. Appliquer et libérer l'instantané puis le supprimer ::
git stash pop [id du stash (commit) ou son nom]
#. Appliquer l'instantané ::
git apply [ID ou nom]
------------------------------------------------------------------------------------------
Réparer / annuler / remplacer
=============================
:Liens Web:
* https://alexgirard.com/git-book/intermediaire/repair-reset-checkout-revert/
# Explications fr
Réparer une erreur non-committée
--------------------------------
#. Réparer une erreur non-committée ::
git reset --hard HEAD
annuler / remplacer le dernier commit
-------------------------------------
#. Annuler le dernier commit ::
git revert HEAD
#. remplacer le dernier commit par le présent ::
git commit --ammend
Réparer un **detached HEAD**
----------------------------
l'état **detached HEAD** se produit lorsque "HEAD" fait référence à un commit et non plus à la branche elle même.
cette information est alors visible en faisant un "git branch"
.. code:: shell
git branch
* (HEAD detached from 2ca07f8)
crash_test
dev_jojo
dev_pierre
master
Les étapes pour rattacher HEAD à la branche sont :
#. Créer une branche temporaire à partir de la branch actuelle et se placer dessus.
.. code:: shell
git checkout -b temp
#. mettre la branch "normalle" à jour par rapport à la branch temporaire.
.. code:: shell
git branch -f [nom_de_la_branche_normalile] [nom_de_la_branch_temporaire]
ex:
git branch -f dev_pierre temp
#. Ce déplacer sur la branche "normalle" et supprimer la branche temporaire.
.. code:: shell
git checkout dev_pierre
git branch -D temp
#. Vérifier que l'opération c'est effectuée correctement.
.. code:: shell
git branch
crash_test
dev_jojo
* dev_pierre
master
------------------------------------------------------------------------------------------
Gestion dépôt distant
=====================
Un dépôt distant ne doit pas être un dossier de travail.
#. créer un dépôt distant
se placer dans le dossier distant
::
git init --bare
#. dépôt local
Si il s'agit d'un nouveau projet on peut faire un clone
::
git clone [//chemin/vers/depot/distant]
Si il s'agit d'un projet existant ayant déjà un dépôt distant, on peut changer le
chemin du dépôt distant directement en éditant le fichier "config" du dépôt local.
------------------------------------------------------------------------------------------
github
======
:Liens Web:
http://guillaumevincent.com/2012/12/23/Git-pour-les-nuls-recuperer_une_branche_distante.html
#. Ajouter le dépôt distant "origin" ::
git remote add origin [url_de_votre_projet_sur_github]
#. Pousser la branch locale "master" vers la branch distante "origin" ::
git push -u origin master
#. Mettre à jour le dépôt local depuis le dépôt distant ::
git pull [nom de la branche]
# le nom de la branch est optionnel si il n'y en a qu'une (origin)
#. Lister les branch distantes
* Lister les branch distantes toutes seules ::
git remote
* afficher l'url à la suite du nom de la branch ::
git remote -v
#. Modifier l'url du dépôt distant
* Ouvrir le dossier ".git" que se trouve à la base du dépôt local
* Editer le fichier "config" et modifier la ligne "URL"
#. Pousser toutes branch d'un coup sur le dépôt distant ::
git push --all
#. Supprimer une branche distante ::
git push origin :[nom_de_la_branche_distante]
# N.B : les ':' doivent être colles au nom de la branch distante
#. Obtenir la list des branch distantes (liste depuis de dépôt local) ::
git branch -r
#. Obtenr la list de toutes les branch ::
git branch -a
#. Pour mettre à jour une branch locale depuis depuis une branch distante ::
git pull -a [depot_distant] [branch_locale]
# ex : git pull -a origin dev
------------------------------------------------------------------------------------------
Importer une branch distante dans le dépôt local
================================================
#. Synchroniser le dépôt local et le dépôt distant : ::
git fetch
#. Contrôler que la nouvelle branch distante est bien référencée dans le dépôt local : ::
git branch -a
* master
remotes/origin/dev_Jojo <--
remotes/origin/master
#. Créer et Tracker la nouvelle branch : ::
git --track [nom_de_la_branche] [chemin_distant]
ex:
git --track dev_jojo remotes/origin/dev_Jojo
#. Basculer sur la nouvelle branch : ::
git checkout [nom_de_la_branch]
ex:
git checkout dev_jojo
------------------------------------------------------------------------------------------
Réparer un liens vers une branche distante
==========================================
:Liens_Web:
* file:///C:/Program%20Files/Git/mingw64/share/doc/git-doc/git-fetch.html
# Manuel de la commande fetch
::
git fetch --prune