Table des matières
La commande "git"
La page de man de git et la page 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 User Settings > 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
Créer un repository
À partir de GitLab
Appuyer sur le bouton “New Project” :
Remplir les informations de base (nom du projet, description, visibilité, …) :
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 <fichier>..." pour mettre à jour ce qui sera validé) (utilisez "git checkout -- <fichier>..." 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
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