====== La commande "git" ====== La page de [[man de git]] et la page [[https://framagit.org/help/|aide de FramaGit]]. ===== Configuration globale ===== On peut rentrer son nom, son mail et demander la coloration automatique : $ git config --global user.name "Simon Lefort" $ git config --global user.email "mail@domain.be" $ git config --global color.ui auto On peut vérifier les informations que l'on a entrées : $ git config --global --list user.name=Simon Lefort user.email=mai@domain.be color.ui=auto ===== Clé SSH ===== GitLab permet de travailler avec des clés SSH, ce qui permet d'envoyer les modifications sans devoir taper une mot de passe à chaque fois. (Il suffit de déverouiller le trousseau de clé à la première utilisation.) Il faut tout d'abord voir si on a une clé existante : $ cat ~/.ssh/id_rsa.pub ssh-rsa AAAA(...) simon@ordi Si nous n'avons pas encore de clé, on en génère une (voir [[ssh]]). Si nous utilisont déjà [[ssh]] et que nous avons une clé, nous pouvons passer à l'étape suivante. Pour ajouter une clé à GitLab, on doit se rendre sur la page [[https://framagit.org/profile|User Settings]] > [[https://framagit.org/profile/keys|SSH Keys]]. Il faut copier la clé **publique** dans la case appropriée. Soit manuellement soit via [[xclip]] : $ xclip -sel clip < ~/.ssh/id_rsa.pub {{ ::gitlab3.png?400 |}} ===== Créer un repository ===== ==== À partir de GitLab ==== Appuyer sur le bouton "New Project" : {{ ::gitlab1.png?400 |}} Remplir les informations de base (nom du projet, description, visibilité, ...) : {{ ::gitlab2.png?400 |}} Cloner le dépôt depuis l'ordinateur local : $ git clone git@framagit.org:(...).git Clonage dans 'dossier'... ==== À partir de son ordinateur local ==== Pas encore trouvé comment créer le dépôt depuis l'ordinateur local et puis l'envoyer vers GitLab. ===== Utilisation basique ===== La première chose à faire, en local, c'est de cloner le dépôt. On peut le faire via l'adresse "git@..." ou via un lien "https://..." : $ git clone git@framagit.org:simon.lefort/NOM-PROJET.git $ git clone https://simon.lefort@framagit.org/simon.lefort/NOM-PROJET.git Aller sur la branche "master" : $ git checkout master Déjà sur 'master' Votre branche est à jour avec 'origin/master'. Télécharger les derniers changements sur le dépôt, branche "master" : $ git pull origin master remote: Counting objects: 3, done. remote: Compressing objects: 100% (3/3), done. remote: Total 3 (delta 1), reused 0 (delta 0) Dépaquetage des objets: 100% (3/3), fait. Depuis framagit.org:simon.lefort/NOM-PROJET * branch master -> FETCH_HEAD 48f7290..10626aa master -> origin/master Mise à jour 48f7290..10626aa Fast-forward README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) Une fois que le dossier local est bien à jour par rapport au dépôt distant, on peut commencer à modifier un/des fichier(s). Il est apparemment mieux de modifier un fichier par commit, pour simplifier les choses. $ nvim README.md $ git status Sur la branche master Votre branche est à jour avec 'origin/master'. Modifications qui ne seront pas validées : (utilisez "git add ..." pour mettre à jour ce qui sera validé) (utilisez "git checkout -- ..." pour annuler les modifications dans la copie de travail) modifié : README.md aucune modification n'a été ajoutée à la validation (utilisez "git add" ou "git commit -a") Faire un "commit" (ajout au dépôt local) des fichiers modifiés avec un commentaire : $ git commit -am "Update README.md" [master b706f64] Update README.md 1 file changed, 1 insertion(+) On peut faire la même chose en deux étapes. Tout d'abord en sélectionnant le fichier qu'on veut "commiter" puis en faisant le commit (Plus besoin de l'option "-a" dans ce cas!) : $ git add README.md $ git commit -m "Update README.md" [master 4fcea35] Update README.md 1 file changed, 1 insertion(+) On peut vérifier le statut et voir s'il y a ou non des différence entre le dépôt local et le dépôt distant: $ git status Sur la branche master Votre branche est en avance sur 'origin/master' de 2 commits. (utilisez "git push" pour publier vos commits locaux) nothing to commit, working tree clean $ git status Sur la branche master Votre branche est à jour avec 'origin/master'. nothing to commit, working tree clean S'il y a des différences et que le dépôt local est en avance, on peut "pousser" celles-ci sur le dépôt distant : $ git push origin master Décompte des objets: 6, fait. Delta compression using up to 4 threads. Compression des objets: 100% (6/6), fait. Écriture des objets: 100% (6/6), 640 bytes | 0 bytes/s, fait. Total 6 (delta 2), reused 0 (delta 0) To framagit.org:simon.lefort/NOM-PROJET.git a7d5e52..4fcea35 master -> master Quand on travaille sur la branche principale, les options "origin" et "master" ne sont pas indispensables, on peut faire directement : $ git push Everything up-to-date ==== Résumé ==== Quand on commence à travailler : $ cd /emplacement/depot/local On vérifie qu'on est bien à jour : $ git pull origin master Quand on crée de nouveaux fichiers et qu'on veut les ajouter simplement : $ git add ./**/* On vérifie qu'ils ont bien été ajoutés : $ git status On "commit" (ajout dans le dépôt local) : $ git commit -am "Commentaire" On envoie sur le dépôt distant ([[:GitLab]]) : $ git push origin master ===== Utilisation avancée ===== Les commandes vues dans l'utilisation basique permettent de travailler seul et sur une seule branche. ==== Ajouter plusieurs fichiers d'un coup ==== J'ai créé plusieurs fichiers .ino dans des sous-répertoires et je voulais pouvoir les ajouter tous en une seule fois. Pour ajouter tous les fichier ".ino" : $ git add ./**/*.ino Pour ajouter tous les fichiers : $ git add ./**/* ==== Modifier un commit ==== On peut modifier le dernier commit avec l'option "amend" : $ git commit --amend [feature/multiple-infra 9a443f1] blablablablablablabla Date: Tue May 29 11:21:44 2018 +0200 1 file changed, 4 insertions(+), 4 deletions(-) Idéalement, on ne change un commit qu'on a **pas encore envoyé sur le serveur**. Il y a aussi cette commande qui permet de remonter dans l'historique des commits: $ git rebase --interactive Attention: Cette commande peut faire des dégâts si elle est mal utilisée! __source:__ [[https://www.git-tower.com/learn/git/faq/edit-fix-commit-message|https://www.git-tower.com/learn/git/faq/edit-fix-commit-message]] ==== Modifier plusieurs commits ==== Pour modifier, par exemple, les 7 derniers commits sur la branche en cours : $ git rebase -i HEAD~7 -x "git commit --amend" __source:__ [[https://stackoverflow.com/questions/4981126/how-to-amend-several-commits-in-git-to-change-author|https://stackoverflow.com/questions/4981126/how-to-amend-several-commits-in-git-to-change-author]] ===== Sources ===== * [[https://fr.wikibooks.org/wiki/Git/Premiers_pas|Git/Premiers Pas (wikibooks.org)]] * [[https://bioinfo-fr.net/git-premiers-pas|Premiers pas avec git (bioinfo-fr.net)]]