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

Sources