Outils du site

fr:git

Git

Nous utilisons une instance locale de Gitlab pour gérer nos dépôts. Nous utilisons donc le système de gestion des dépôts Git. Nous récupérons aussi les données de Ryzom Core qui utilise le système de gestion des dépôts Mercurial.

Voir aussi les principes de base et comment récupérer les données propres à Khaganat.

Les indications d'installation sont données pour un système basé sur Debian, il suffit d'adapter la commande apt-get à votre propre distribution/OS.

Commencez par installer git sur votre ordinateur.

sudo apt-get install git

Paramétrez ensuite votre git, de façon globale. Commencez par indiquer votre nom d'utilisateur, puis votre email :

git config --global user.name "Votre Nom Ici"
git config --global user.email moi@example.com

Trouvez dans quel dossier vous souhaitez gérer votre projet (en local). Au besoin créez ce dossier. Mettez-vous dans ce dossier en console :

mkdir Monprojet
cd Monprojet

Ensuite, tout dépend de si vous démarrez depuis un projet en local, ou si vous mettez aussi votre projet en ligne, par exemple sur Github ou notre Gitlab

Se connecter à un projet Github

Il faut indiquer à quelle source se nourrir.

Si vous avez déjà un projet sur Github que vous souhaitez copier en local,

git clone https://github.com/user/monprojet.git 

Adaptez user/monprojet à l'adresse url du projet et n'oubliez pas le .git à la fin. Le projet sera copié dans le dossier où vous êtes.

Si vous n'avez pas de projet sur Github (mais un compte),

git init

Cela créé un dossier caché où git stockera les infos. Vous pouvez ensuite ajouter l'adresse via la commande suivante :

git remote add origin https://github.com/user/monprojet.git

Il faudra ensuite “push” vos modifications vers le projet en question.

Pour contrôler que tout va bien :

git remote -v

Afin de ne pas retaper son mot de passe à chaque “push”, vous pouvez configurer ssh pour vous connecter directement à votre compte.

Commencez par générer votre clé ssh si ce n'est pas déjà fait et assurez-vous que l'agent ssh est lancé :

eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_rsa

Ouvrez le fichier ~/.ssh/id_rsa.pub, copier tout, puis rendez-vous sur Github. Dans “Setting”, dans votre compte, sélectionnez “SSH keys”. Copiez votre clée publique. Indiquez ce que vous voulez en titre, seul vous le verrez. Cliquez sur “Add key”, entrez votre mot de passe. Pour vérifier que tout marche bien, faites :

ssh -T git@github.com

Si vous pouvez vous connecter c'est que ça marche.

Nous ne recommandons pas de passer uniquement par Github ; comme tout organisme centralisé et propriétaire, il est susceptible de dérive. Mais c'est actuellement une plate-forme connue et très utilisée, une façon comme une autre de commencer. Jusque là, il n'y a eu aucune alerte sur leurs pratiques.

Notre instance gitlab n'est pas très puissante et, de ce fait, uniquement ouverte aux projets en rapport avec Khaganat.

Commandes de base

Pour lister ce qui est à jour dans votre dossier :

git status

Les fichiers qui ne sont pas synchronisés seront en rouge, ceux qui attendent d'être placés dans un commit en vert.

Ajouter les nouveaux fichiers à git (en local) :

git add hello.txt
git add *

Avec l'option *, tous les nouveaux fichiers seront ajoutés.

Pour mettre à jour ce que vous avez ajouté/modifié :

git commit -m 'bla bla'

Les fichiers auront en commentaire votre “blabla” à cette version des modifications.

Ensuite, envoyez tout ça à un serveur :

git push

Cela utilise par défaut l'adresse que vous avez auparavant indiqué. Si vous envoyez sur Github, votre nom d'utilisateur et votre mot de passe sera demandé.

D'une branche à l'autre

Si vous ne voyez pas certains fichiers ou modifications, c'est sans doute qu'ils n'ont pas encore été intégré à master et sont sur une branche à part (voir l'organisation gitflow du travail).

Pour lister toutes les branches, y compris celles qui ne sont pas décompressés depuis votre clone/pull :

git branch -r

Pour voir la liste des branches sur votre installation actuelle, qui ont été décompressées (l'astérisque devant une des branches indique celle sur laquelle on est) :

git branch

Récupérez le nom de la branche, puis changez :

git checkout develop

Voir aussi

Importer les nouveautés de Ryzomcore

J'ai créé un fork de ryzomcore sur github à partir des sources

git pull
git checkout ryzomcore
git remote add upstream https://github.com/deedounet/ryzomcore.git
git fetch upstream

Essayer ça si vous utiliser les même sources

git merge upstream/compatibility-develop
git push origin ryzomcore

Si il y a des problemes de merge en changeant de source, mais ça reprend de zero

git reset --hard upstream/compatibility-develop
git push origin ryzomcore --force

Aider la compilation de nos projets

Gitlab permet aux utilisateurs d'aider à la compilation d'un projet en proposant la puissance de calcul de leurs ordinateurs personnels.

Installer et configures docker. En super utilisateur (faites sudo avant sinon), installez ce qui suis :

apt-get install docker
systemctl start docker

Si vous voulez que le service docker démarre automatiquement avec votre ordinateur, vous pouvez aussi faire

sudo systemctl enable docker

Toujours en root :

docker pull gitlab/gitlab-runner
docker pull gitlab/gitlab-runner:alpine
docker run -d --name gitlab-runner --restart always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine

Explication rapide :

  • -d pour que ce soit en arrière plan,
  • –name pour donner un nom,
  • –restart va le redémarer automatiquement (au lancement de docker ou en cas de crash).
  • -v va lier des dossiers externes à des dossiers internes, sous forme de “[dossier interne]:[dossier externe]”. Ici par exemple, /etc/gitlab-runner sur le container sera lié à /srv/gitlab-runner/config sur votre machine.
  • enfin, il y a la sélection de l'image : ici, l'image “alpine” de gitlab/gitlab-runner.

Note : en cas de mise à jour de l'image, il faudra faire les commandes suivantes pour avoir l'image à jour supprimer le container :

docker pull gitlab/gitlab-runner:alpine
docker rm -f gitlab-runner

puis recréer un container avec la commande précédente (docker run -d –name gitlab-runner –restart always -v /var/run/docker.sock:/var/run/docker.sock -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner:alpine).

Docker fonctionne selon logique pull → rm → run.

À partir de là, nous avons un container docker “gitlab-runner”, qui va commander le docker de l'hôte lui-même au travers de “-v /var/run/docker.sock:/var/run/docker.sock”. C'est un socket unix, imaginez-le comme une connexion internet interne.

Il faut ensuite enregistrer ce “runner” sur le CI1).

sudo docker exec -it gitlab-runner gitlab-runner register

Vous aurez besoin d'information spécifique de votre projet. (à savoir l'URL et le “registration token” [définit : settings - CI/CD de votre projet GIT])

Ex.: https://git.khaganat.net/khaganat/mmorpg_khanat/opennel-pymanager/settings/ci_cd https://git.khaganat.net/khaganat/mmorpg_khanat/khanat-opennel-code/settings/ci_cd https://git.khaganat.net/khaganat/khanat/runners

Question Réponse possible (à adapter)
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/ci): https://git.khaganat.net/ci2)
Please enter the gitlab-ci token for this runner: Uxhiv1oGgNd6FECKDMn53)
Please enter the gitlab-ci description for this runner: un nom pour vous identifier dans la liste des runners, par exemple pseudo+OS
Please enter the gitlab-ci tags for this runner (comma separated): Docker,Linux
Whether to run untagged builds true
Whether to lock the Runner to current project true
Please enter the executor: docker-ssh+machine, docker, docker-ssh, parallels, shell, ssh, virtualbox, docker+machine: docker
Please enter the default Docker image (eg. ruby:2.1): ubuntu:16.044)

Dans votre fichier .gitlab-ci.yml [présent dans votre GIT], il faut s'assurer d'avoir un tag identique (par exemple Docker)

Ressources utiles

Grafikart propose une formation en ligne gratuite à Git, de très bonne facture.

Il y a en tout 16 chapitres et plus de trois heures de vidéo.

Vous pouvez soutenir son travail en vous abonnant sans que cela ne soit nécessaire pour visionner les cours.

En voici la vidéo d'introduction :

Voir aussi l'utilisation de Mercurial, un autre système de gestion de version.

1)
“Continuous Integration”, en français “Intégration continue”, en gros notre instance gitlab en cours
4)
Même si ce n'est pas votre OS, Dremor a dit que c'était ça !
fr/git.txt · Dernière modification: 2018/02/06 21:49 par aleajactaest