====== 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)]]