La page de man de git et la page aide de FramaGit.
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
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
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'...
Pas encore trouvé comment créer le dépôt depuis l'ordinateur local et puis l'envoyer vers GitLab.
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
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
Les commandes vues dans l'utilisation basique permettent de travailler seul et sur une seule branche.
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 ./**/*
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
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