gitlab

naos 2017/11/25 21:54

GitLab

testé sur Debian 9 Stretch

⇒ Git est un Distributed Version Control System (DVCS)

⇒ GitLab est une interface pour Git

⇒ outil de gestion d'équipe

⇒ stockage de code dans un dépôt sous forme de source distant ou local, garde les version précédentes, génère un historique

⇒ toutes personnes autorisées peuvent contribuer au code

Gère les dépôts, les issues, les utilisateurs, les groupes, intégration continue

Peut envoyer des messages vers Mattermost

Serveur: Gogs, GItlab, framagit,

Client: gitkraken, cgit

Quelques exemples de plugins:

Snippets: permet de partager des bouts de code entre utilisateurs

Gist: comme un pastbin mais pas temporaire

Gravatar: site qui fait la liaison entre tous les sites pour les avatars

# apt-get update

# apt-get install curl openssh-server ca-certificates

# apt-get install postfix

Indiquez 'Internet Site'

# curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | bash

Pour installer la version Community Edition (gitlab-ce) ou pour la version propriétaire Enterprise Edition (gitlab-ee)

# EXTERNAL_URL=“http://gitlab.example.com” apt-get install gitlab-ce

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_rsa -C "Clef SSH pour GitLab" -o -a 100
$ ssh-keygen -t ed25519 -f -f ~/.ssh/id_rsa -C "Clef SSH pour GitLab" -a 100

On peut importer des projets (exemple le noyau Linux, https://github.com/torvalds/linux.git)

Fichier de configuration de gitlab:

/etc/gitlab/gitlab.rb

Fichier de configuration d'exemple:

/opt/gitlab/etc/gitlab.rb.template

Command line instructions

Git global setup
 
$ git config --global user.name "Administrator"
 
$ git config --global user.email "admin@example.com"

Create a new repository

$ git clone git@gitlab.DOMAIN.TLD:root/repo.git
$ cd repo
$ touch README.md
$ git add README.md
$ git commit -m "add README"
$ git push -u origin master

Existing folder

$ cd existing_folder
$ git init
$ git remote add origin git@gitlab.DOMAIN.TLD:root/repo.git
$ git add .
$ git commit -m "Initial commit"
$ git push -u origin master

Existing Git repository

$ cd existing_repo
$ git remote rename origin old-origin
$ git remote add origin git@gitlab.DOMAIN.TLD:root/repo.git
$ git push -u origin --all
$ git push -u origin --tags

Pour travailler sur un code il faut le récupérer:

Clone:

$ git clone < URL du dépôt > [destination]
--bare: récupérer un tarball
exemple: git clone --bare https://github.com/roundcube/roundcubemail/ /var/www/html/

Travailler sur un projet: avec une branche, parallèlement au master

Git est une arborescence

Une branche (new branch) est une déviation du code depuis un commit particulier

Commencer un projet:

$ git init

Pour visualiser les branches locales:

$ git branch

Pour visualiser les branches disponibles sur le serveur central:

$ git ls-remote

Pour afficher les dépôts configurés:

$ git remote -v

Ajouter un dépôt distant:

$ git remote add machin https://gitlab.com/USER/PROJET

Supprimer le dépôt machin:

$ git remote remove machin

Utiliser la nouvelle branche:

$ git checkout NouvelleBranche

Les tags sont utilisés pour figer une version

Travis est un outil utilisé par Git qui permet de valider le fonctionnement de tout le code

Exemple: répertoire git, fichier d'ajout readme, “First” message pour expliquer le commit

$ mkdir git

$ cd git

$ git init

$ touch readme

$ git add readme

$ git commit -m “First”

$ git branch

	* master

$ git branch nouvelle_branche

$ tree .git

Créer et utiliser la nouvelle branche:

$ git checkout -b nouvelle_branche

Voir tous les changments

$ git status

Ajouter un fichier au Master ou Branche

$ git add Nom_du_fichier

Enregistrer l'avancement du code

$ git commit

Enregistrer l'avancement du code Alternative, envoi de toutes les modifications de tous les fichiers

$ git commit -a -m "message"

Avant son premier commit, il faut préciser:

$ git config --global user.name "USER NAME"
$ git config --global user.email "USER@DOMAIN.TLD"

Configurer l'éditeur préféré:

$ git config --global core.editor "vim"

Récupérer toutes les informations distantes:

$ git fetch origin

Comparer notre environnement de travail:

$ git log origin/dev..dev
$ git log dev..origin/dev

Comparer notre environnement de travail EN MODE GRAPHIQUE:

$ gitk log origin/dev..dev

Pour publier les commits sur le dépôt distant:

$ git push

Pour publier les commits sur le dépôt distant:

$ git push -u origin master	
$ git push -u origin NouvelleBranche

Pour fusionner deux branches

$ git merge master NouvelleBranche

Pour fusionner deux branches, se positionner sur la branche cible puis

$ git merge NouvelleBranche

A partir des commandes précédentes avec le fichier readme créé Aller sur http://gitlab.DOMAIN.TLD puis faire ces commandes:

$ cd git
$ git remote add origin http://gitlab.DOMAIN.TLD/root/test.git
$ git push -u origin --all
Username for 'http://gitlab.DOMAIN.TLD': root
Password for 'http://root@gitlab.DOMAIN.TLD': 
Counting objects: 3, done.
Writing objects: 100% (3/3), 200 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://gitlab.DOMAIN.TLD/root/test.git
 * [new branch]      master -> master
 * [new branch]      nouvelle_branche -> nouvelle_branche
Branch master set up to track remote branch master from origin.
Branch nouvelle_branche set up to track remote branch nouvelle_branche from origin.

Procédure générale de Git

init → créer fichier → add → commit → push

$ cd git

$ git init ça créé un .git

$ touch readme

$ git add readme ou . pour que tous les fichiers du répertoire soient ajoutés

$ git commit -m “bla bla”

$ git remote rename origin old-origin

$ git remote add origin git@gitlab.DOMAIN.TLD:root/test.git

$ ssh-keygen -t rsa -b 4096 -f ~/.ssh/id_gitlab -C “clef ssh pour gitlab” -o -a 100

	Ajouter notre clé à notre registre SSH:
# eval "$(ssh-agent -s)"
# ssh-add ~/.ssh/id_gitlab
		/!\ .git doit être avec les droits de l'utilisateur de la clef ssh

$ git push -u origin master pour soumettre vos changements au serveur Git dans Master

$ git status

Récupérer les dernières modifications depuis le dépôt:

$ git pull

# Vérifier le .ssh/conf que la branche est bien dans le origin

Revenir en arrière

$ git log
$ git revert 5b1c84457c97379c6318c1c6a6f024e576d0595b

Visualiser des modifications:

$ git diff [ commit_1 commit_2 ]

Différence entre fetch et pull

$ git fetch= récupère la liste des modifications
$ git pull= récupère la liste des modifications + récupère le travail localement

Visualiser l'origine des modifications

$ git blame < fichier >

Annuler les modifications dans la copie de travail

$ git checkout --NOM_DU_FICHIER

Afficher la liste des branches du serveur:

$ git branch -r

Soit la méthode radicale, qui fait tout perdre

$ git checkout

Soit la méthode idéale, les modifications distantes sont mises en stash en:

$ git stash
$ git pull
	Vérifier les conflits
$ git stash pop	Permet de fusionner les deux versions en conflits

Pour lister les stash:

$ git stash list

Applique un stash mais ne le supprime pas de la liste

$ git stash apply [stash@{x}] 

Si on veut supprimer ensuite un stash

$ git stash drop 

<<<<<<<<<<<<<<<< HEAD	local
==========
>>>>>>>>>>>>>>>>	distant
NouvelleBranche

Supprimer une branche distante:

$ git push origin --delete NouvelleBranche

(différence entre deux fichiers exporté sous forme de fichier)

Créer le patch

Créer une nouvelle branche

$ git checkout -b patchMiniuature
		export
$ git format-patch master --stdout > correction.patch

Appliquer le patch

$ git apply --stat correction.patch
$ git apply --check correction.patch
$ git apply correction.patch
$ git am --signoff < correction.patch		en complément de la cde préc. pour insérer les informations de l'auteur du patch

fichier config:

fichier index: binaire, rescence les fichiers commités, permissions rattachés, la sommme de contrôle en SHA

$ git ls-tree [-r|-d] <branch>

fichier head: indique branche courante et répertoire actuel

$ cat $PROJET/.git/HEAD

Ajouter des membres

Settings / Members  

$ git pull
$ git checkout  branche
$ git origin branche
$ touch test.txt
$ git commit
$ git push --set-upstream origin branche

Après avoir faire un fork, il faut ajouter le nouveau dépôt

$ git remote add fork_truc git@gitlab.DOMAIN.TLD:USER/project.git
	remarquez qu'il faut changer le nom, fork au lieu de origin
$ vim README.MD 
 
$ git commit -a -m "fix #1"
 
$ git status
# On branch master
# Your branch is ahead of 'origin/master' by 3 commits.
#   (use "git push" to publish your local commits)
#
nothing to commit, working directory clean
 
$ git pull
remote: Counting objects: 2, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 2 (delta 0), reused 0 (delta 0)
Unpacking objects: 100% (2/2), done.
From gitlab.DOMAIN.TLD:root/project
   5531440..bd5281e  master     -> origin/master
Merge made by the 'recursive' strategy.
 README.MD.orig | 7 +++++++
 1 file changed, 7 insertions(+)
 create mode 100644 README.MD.orig
 
$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from 'matching' to 'simple'. To squelch this message
and maintain the current behavior after the default changes, use:
 
  git config --global push.default matching
 
To squelch this message and adopt the new behavior now, use:
 
  git config --global push.default simple
 
See 'git help config' and search for 'push.default' for further information.
(the 'simple' mode was introduced in Git 1.7.11. Use the similar mode
'current' instead of 'simple' if you sometimes use older versions of Git)
 
Counting objects: 10, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 563 bytes | 0 bytes/s, done.
Total 5 (delta 2), reused 0 (delta 0)
To git@gitlab.DOMAIN.TLD:root/project.git
   bd5281e..7758735  master -> master

Dans l'interface web gitlab aller dans Issues / List / Closed pour voir la notification du fix #1

  • gitlab.txt
  • Dernière modification: 2017/11/26 00:50
  • par naos