Logo Khaganat
Traductions de cette page?:

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, ainsi que Gitflow. Les possibilités de Gitlab sont très bien présentées sur l'article Gérer des projets avec Gitlab.

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.

Installer et paramétret Git chez soi

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.

Pour les projets sur notre gitlab, il faut se connecter via ssh. Regardez l'adresse dans Dépôts > Clone. Cela devrait être quelque chose comme

git clone ssh://git@git.khaganat.net:3543/monuser/test.git

Si l'adresse change, pour indiquer la nouvelle, c'est la commande suivante :

git remote set-url origin ssh://git@git.khaganat.net:3543/monuser/test.git

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

Pour récupérer directement une branche précise (par exemple ici le client) :

git clone -b develop ssh://git@git.khaganat.net:3543/khaganat/mmorpg_khanat/khanat-client.git 

Et si vous voulez récupérer sans l'historique, par exemple juste pour tester le client en question sans s'encombrer, c'est l'option --depth 1 qui va être utile :

git clone -b develop --depth 1 ssh://git@git.khaganat.net:3543/khaganat/mmorpg_khanat/khanat-client.git 

Voir aussi

Importer les nouveautés de Ryzomcore

J'utilise un fork de ryzomcore sur github à partir des sources

cd khanat_opennel_code
git pull
git checkout ryzomcore
git remote add upstream https://github.com/ryzom/ryzomcore.git
git fetch upstream

Essayer ça si vous utiliser les même sources

git merge upstream/develop
git push origin

Et voila, c'est à jour :)

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

Annuler les modifications locales

Parfois, lors d'un pull, ce message apparait : “error: Vos modifications locales aux fichiers suivants seraient écrasées par la fusion”.

Soit on fait un commit, on push, soit si ce n'est pas des trucs qu'on veut garder, on fait le bourrin et on efface :

git restore *

Un git status ensuite devrait montrer que tout va bien et qu'on peut tirer depuis la branche amont.

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 :

sudo apt install docker.io
sudo 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.

Forges alternatives basées sur Git

Forges indépendantes documentées :

  • NotABug.org : basée sur leur fork de Gogs dédiée à l'hébergement de projet sous licence libre. C'est un des projets de The Peers Community.
  • Codeberg : basée sur Gitea, un fork de Gogs plus communautaire dans sa gestion, dédiée à l'hébergement de projet sous licence libre et open source.

Divers membre du collectif C.H.A.T.O.N.S :

Autres forges moins documentée :

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 !
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/git.txt · Dernière modification : 2022/03/25 21:09 de zatalyz

Licences Mentions légales Accueil du site Contact