* [[:start|Accueil]]
* [[:public:kb|KB]]
====== GIT ======
==== Liens ====
* [[http://git-scm.com/book/fr/v1/|Git Book]] LE site Git, très complet
* Si vous n'avez que quelques minutes, liste ce [[http://rogerdudler.github.io/git-guide/index.fr.html|Petit guide]] il va vraiment à l'essentiel.
* {{:public:kb:git_cheat_sheet.pdf|Git Cheat sheet}} (tirée du site précédent)
===== Installer Git client =====
==== Installer ====
Par les dépots
sudo apt-get install git
un peu compliqué non ?
==== Déclarer un compte ====
git config --global user.name "Your_Name"
git config --global user.email "youremail@domain.com"
Ces commandes vont avoir pour effet de renseigner le fichier ~/.gitconfig en lui ajoutant :
[user]
name = Your_Name
email = youremail@domain.com
===== Projet =====
Déclarer un dossier comme projet git.\\
Se placer dans le répertoire en question et :
git init
ou pour directement récupérer le contenu d'un projet existant :
==== Cloner un repository ====
git clone url_du_repository
url_du_repository peut prendre plusieurs formes, selon le protocole utilisé :
* ssh : utilisateur@serveur:/chemin/projet.git
* http : http://exemple.com/projetgit.git
* local et git : voir [[http://git-scm.com/book/fr/v1/Git-sur-le-serveur-Protocoles|cette documentation]]
===== Commandes =====
==== Ajouter un fichier ====
NB : Il faut être placé dans le dossier du repository ...
git add mon_fichier.txt
On peut procéder ainsi pour plusieurs fichiers, mais il est aussi possible d'indiquer tout un répertoire (et son arborescence) :
git add .
==== Supprimer un fichier ====
=== Supprimer et garder les versions ===
git rm fichier.txt
=== Supprimer et ne pas garder les versions ===
git rm --cached fichier.txt
==== Renommer un fichier ====
git mv ancien_nom nouveau_nom
==== Commit ====
git commit -am "un message"
==== Statut ====
git status
==== Historique des commits ====
Connaitre l'historique des commits
git log
==== Historique pour un seul fichier ====
git log -p
==== Revenir en arrière ====
Revenir en arrière
git checkout [chemin et nom du fichier]
==== Envoyer son code au serveur ====
git push origin master
push : envoyer\\
origin : nom par défaut du serveur remote\\
master : branche courante\\
==== Récupérer le code depuis le serveur ====
git pull origin master
==== Mettre de côté : stash ====
Supposons qu'on ait une version stable d'un programme, passée en prod.\\
On décide de travailler sur une nouvelle fonctionnalité (pour ca on édite nos fichiers locaux) quand un bug trouvé en production nécessite qu'on le corrige immédiatement.\\
Problème : ce qu'on est en train de faire n'est pas terminé et ne peut pas être passé en production, donc si on résout le bug et qu'on commit, on enverra aussi le code non finalisé (en supposant qu'il est dans le même fichier que le bug ...). Donc, il faut pouvoir mettre de côté ce qu'on est en train de faire.\\
Les branches permettent cela, mais aussi, en restant dans la même branche, le stash :
# je travaille sur mon programme
touch fichier.txt
echo "premiere edition" >>fichier.txt
# je le passe sur le serveur, pour le passer en production.
git add .
git commit -m "premiere edition"
git push origin master
# maintenant je decide de travailler sur une nouvelle fonctionalite, quand je suis interrompu
echo "deuxième édition, pas terminée... ">> fichier.txt
#on met de côté l'édition en cours car on doit traiter une urgence
git stash
# on est retourné sur le précédent commit
#on édite puis on commit...
echo "correction du bug" >>fichier.txt
git commit -am "correction du bug"
git push origin master
# on revient sur l'édition en cours
git stash pop
===== Tips / bugs =====
==== Gitignore est ignoré ====
[[https://gist.github.com/Thithip/cfc058442e4e052aa817|astuce trouvée ici]]
Si au fur et à mesure des commits, ou après un git clone, le .gitignore peut ne plus fonctionner, Git indexe alors des fichiers qui ne le devraient pas. Il faut donc tout réinitialiser.
* archivage de tout le code modifié non versionné ;
* suppression de l'index
git rm -r --cached .
* réimportation de tout l'index (le .gitignore est maintenant pris en compte) :
git add .
* commit des changements :
git commit -m ".gitignore est maintenant fonctionnel"