Utiliser Git

Généralités

git est un système de partage de code source d’un projet, où chaque personne contribuant peut intégrer des changements de sorte que les changements de toutes les contributions peuvent être fusionnés, partagés sur des plateformes de projets en ligne (Gitlab, Github, etc.) et distribués pour d’autres utilisations et contributions.

Ajouter sa clé publique SSH dans Gitlab

Pour la mise à jour de certains services, vous aurez besoin de travailler avec un clone local ; il faudra que votre clé publique SSH soit présente dans votre profil Gitlab.

Pour cela, allez dans les paramètres de votre compte :

Puis dans Clefs SSH :

Et remplissez la page qui s’est ouverte :

Contribuer à un service

Si ce n’est pas déjà fait, commencer par cloner le dépôt. Le dépôt element est utilisé pour l’exemple.

git clone git@forge.tedomum.net:tedomum/element.git
cd element

Puis ajouter l’upstream dans les cibles Git :

git remote add upstream https://github.com/vector-im/element-web.git

La branche par défaut est tedomum, si elle n’est pas sélectionnée au moment du clone, forcer un switch :

git switch tedomum

Afficher le log récent :

$ git log --oneline

0ec9af104 (HEAD -> tedomum) Update to 1.9.2
acf72dcee (tag: v1.9.1+tedomum.1) Update to 1.9.1
5b998a79a (tag: v1.9.0+tedomum.2) Local TeDomum changes @
82205a0f2 (tag: v1.9.0+tedomum.1) Local TeDomum changes 1
1cf095a3e (tag: v1.9.2, origin/release-v1.9.2) v1.9.2
2deee7a70 Prepare changelog for v1.9.2
50a2badd9 Upgrade matrix-react-sdk to 3.32.1
df3647f13 Upgrade matrix-js-sdk to 14.0.1
afe8e878a (tag: v1.9.1, origin/release-v1.9.1-rc.2) v1.9.1
8e486c3f9 Prepare changelog for v1.9.1
2ef743e5e Upgrade matrix-react-sdk to 3.32.0
a605657eb Upgrade matrix-js-sdk to 14.0.0

Le HEAD est le dernier commit, sur la branche courant tedomum, la dernière action est bien la mise à jour vers 1.9.2. Les commits avec un tag correspondent aux versions figées pour déploiement. Les tags avec +tedomum correspondent aux versions spécifiques à TeDomum pour déploiement sur nos infrastructures :

Pour travailler sur une mise à jour de fonctionnalité, un correctif de déploiement, ou autre, commencer par créer une branche dédiée :

git branch feat-ma-fonctionnalite
git switch feat-ma-fonctionnalite

Une fois les changements apportés, et autant de fois que nécessaire, générer un commit avec les fichiers pertinents :

git add fichier1 fichier2
git commit -m "Message de commit"

Lorsque la branche est prêt, la pousser vers le dépôt d’origine (TeDomum) :

git push origin feat-ma-fonctionnalite

Mettre à jour un service

De même que pour la contribution, récupérer le dépôt et configurer l’upstream. En affichant le log, constater quel est le dernier tag upstream intégré :

$ git log --oneline

5b998a79a (HEAD -> tedomum, tag: v1.9.0+tedomum.2) Local TeDomum changes @
82205a0f2 (tag: v1.9.0+tedomum.1) Local TeDomum changes 1
1cf095a3e (tag: v1.9.2, origin/release-v1.9.2) v1.9.2
2deee7a70 Prepare changelog for v1.9.2
50a2badd9 Upgrade matrix-react-sdk to 3.32.1
df3647f13 Upgrade matrix-js-sdk to 14.0.1
afe8e878a (tag: v1.9.1, origin/release-v1.9.1-rc.2) v1.9.1
8e486c3f9 Prepare changelog for v1.9.1
2ef743e5e Upgrade matrix-react-sdk to 3.32.0
a605657eb Upgrade matrix-js-sdk to 14.0.0

Ici la dernière version est la 1.9.0, qui a subi deux changements internes. Récupérer les changements depuis les dépôts distants (dont l’upstream) :

git fetch --all

Afficher les tags déclarés pour déterminer le dernier publié :

$ git tag
[...]
v1.9.0
v1.9.0+tedomum.1
v1.9.0+tedomum.2
v1.9.1

Ici le tag v1.9.1 plus récent est disponible. Fusionner les modifications dans la branche courante :

git merge v1.9.1 -m "Update to v1.9.1"

Si des conflits apparaissent, soit il s’agit de conflits entre les changements internes et les modifications upstream, soit il s’agit de conflits entre les branches upstream elles-mêmes. Dans le premier cas, utiliser un outil de résolution de conflits (tel que diff3 ou meld) ou bien résoudre les conflits manuellement dans un éditeur de texte, puis valider :

## Pour afficher l'état
git status
## Une fois un fichier fusionné
git add fichier1
## Une fois tout fusionné
git commit

Dans le cas où les conflits sont entre les branches upstream, simplement abandonner le merge et le relancer en validant la branche la plus récente :

git merge v1.9.1 -m "Update to 1.9.1" -Xtheirs

Lorsque la branche est bien fusionnée, vérifier l’historique, puis créer un premier tag interne :

git tag v1.9.1+tedomum.1

Finalement pousser la branche et le tag vers l’origine :

git push origin tedomum
git push origin v1.9.1+tedomum.1
## Toujours pousser nos tags internes, pas les tags d'origine