* [[: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"