Commandes Git de tous les jours

From VLE

Jump to: navigation, search

Cette page décrit les commandes utilisées quotidiennement pour le développement de VLE.

Contents

Récupérer une version de VLE

  • La version en cours de développement :
git clone git://vle.git.sourceforge.net/gitroot/vle/vle
  • Téléchargement d'une branche spécifique de VLE, par exemple, la version 0.7 :
git clone git://vle.git.sourceforge.net/gitroot/vle/vle
cd vle
git-branch -b v0.7.0 -m 0.7.0
git-checkout v0.7.0

Création d'un patch

La création d'un patch se déroule en trois étapes, le téléchargement des sources ou de la dernière branche, la création du patch et l'envoi au mainteneur officiel.

  • Développer dans VLE :
# création d'une branche locale dans laquelle créer les patchs
git checkout -b correction master
 
# modification du code
[...édition...]
 
# pour ajouter, déplacer ou supprimer des fichiers
git add / git-mv / git-rm
 
# création d'un commit,
git-commit -a
 
# Vous pouvez bien sûr créer plusieurs patchs si vous modifiez à nouveau le
# dépôt et que vous exécutez de nouveau la commande git-commit -a.
# Attention à bien suivre le style des messages lors du commit.
 
# Enfin, la dernière étape, la création des patchs : un fichier par commit
# depuis l'origine.
git format-patch origin
  • Si vos patchs demandent des modifications, la procédure classique est la suivante :
    • Modification du commit le plus récent :
# si le patch à modifier est en haut de la pile, vous pouvez directement
# modifier le dépôt
[...édition...]
git add / git-mv / git-rm
 
# une fois les modifications adoptées, il faut modifier le patch commit
# courant :
git commit -a --amend
    • Fusion de commits :
# Parfois, il est nécessaire de fusionner des commits entre eux pour éviter
# d'envoyer sur le serveur des commits qui sont trop dépendants. La solution
# sous Git est d'ouvrir les commits. Par exemple si on veut fusionner
# deux commits :
# 1. On ouvre le commit en sommet de la branche
git reset --soft HEAD~1
 
# 2. HEAD est égal au deuxième patch. Il faut amender ce patch :
git commit -a --amend
 
# Un éditeur s'ouvre et normalement a repris le message du 2e commit et les
# modifications du premier commit sont intégrés au 2e commit.
    • Modification d'un commit dans un ensemble de commits :
# le commit à modifier est le 3e dernier commit
git rebase -i HEAD~3
 
# votre éditeur favori se lance, mettez 'edit' dans la ligne du patch
# à corriger. Git se charge de mettre votre dépôt dans l'état où le
# commit à modifier est le plus récent. Vous pouvez maintenant corriger
# les problèmes
[...édition...]
git add / git-mv / git-rm
 
# une fois fini, tapez la commande suivante pour remettre le dépôt dans
# un état normal. Attention, si vous avez des fichiers dans l'état :
# 'Changed but not updated', il est nécessaire des les ajouter avec la
# commande git add
git rebase --continue
  • De temps en temps, il est nécessaire de mettre votre dépôt à jour par rapport au dépôt public de VLE :
# avant d'envoyer le patch, vous vous assurez que l'ensemble de vos
# patchs sont compatibles avec le dépôt officiel VLE :
git checkout master # sur la branche master
git pull # nous récupérons les patchs officiels et nous les
                       # fusionnons avec la branche locale master
 
git checkout correction # sur la branche correction
git rebase master # nous tentons d'appliquer les patchs,
                        # en cas de conflit, les résoudre et faire
                        # git rebase --continue
 
# vous pouvez également demander un mode intéractif plus souple si certain
# de vos patchs ont été intégrés sur le dépôt public :
git rebase -i master

Syntaxe pour les patchs

Un patch possède une syntaxe bien définie. Elle est composée de deux partie. Une première qui indique de manière succincte le rôle du patch et la deuxième de plus complète. À noter que la description complète peut inclure des références sur les identifiants des bogues et autres fonctionnalités du bugtracker. Dans ce cas, il faut ajouter (closes: #xxx, #yyy).

  • Le format du message est le suivant :
bibliothèque: libre jusqu'au 53e caractère
Une description plus complète du patchs, avec l'utilisation d'item si
nécessaire. Comment ? Pourquoi ? La taille ne doit pas dépasser 72
caractères
* On peut également ajouter des listes pour bien montrer les
  différentes parties du patch.
* etc.
  • Des exemples simples à éviter :
gvle: fix crash when move cursor
vle: add get function in condition class
  • Un exemple plus complet :
Add a copy constructor to the external event
* Add new swap functions to the devs::Event and devs::ExternalEvent
  (closes: #321654987).
* Add a copy constructor to build easyly new external events
  (closes: #321,#654).

Création d'un dépôt distant

La création d'un nouveau dépôt commence par la création du dépôt local avant la création du dépôt distant (dans notre cas sur le serveur vle).

  • Création du dépôt local

Il faut se placer à la racine de son projet et initialiser le dépôt local. Un répertoire .git est créé à la racine de votre projet.

cd monprojet
git init
  • Configuration du dépôt local

Avant d'aller plus loin il s'agit de configurer votre environnement Git avec vos nom et prénom ainsi que votre adresse mail.

git config --global user.name "Gauthier Quesnel"
git config --global user.email quesnel@users.sourceforge.net
git config --global color.diff auto
git config --global color.status auto
git config --global color.branch auto
  • Ajout des fichiers du projet au dépôt local

L'ensemble des fichiers du projet doivent être ajoutés au dépôt local. Attention de bien vérifier que tous les fichiers doivent être rattachés au projet. Si ce n'est pas le cas, il faut ajouter individuellement chaque fichier.

git add .

Si un fichier a été ajouté accidentellement, la commande git rm supprime le fichier du dépôt.

Il faut maintenant procéder au commit initial. Un éditeur de texte s'ouvre afin de spécifier le texte du commit initial.

git commit -a

Votre dépôt local est maintenant prêt à être publié sur un dépôt distant.

  • Création du dépôt distant

Il faut se connecter sur le serveur distant (en l'occurrence vle-project.org) en ssh.

ssh <login>@vle-project.org -p 6999

Dans votre compte (sur vle-project.org), on crée au préalable un répertoire git pour tous vos dépôts distants si ce n'est pas déjà fait.

mkdir git
cd git

Nous allons maintenant créer un dépôt vide en initialisant un dépôt vide et autoriser les push sur ce serveur (vle-project.org).

mkdir monprojet.git
cd monprojet.git
git init --bare
chmod a+x hooks/post-update
touch git-daemon-export-ok

Depuis la machine locale, il faut alors placer le contenu du dépôt local sur le dépôt distant.

$ git remote add -t master -m master origin ssh://<login>@vle-project.org:6999/home/<login>/git/<mon-projet>.git
$ git push --all -f origin
  • Accès en gitweb

Nous allons publier son contenu sur gitweb (attention, il faut être root).

$ touch /home/<login>/git/<mon-projet>.git/git daemon-export-ok
$ cd /var/cache/git
$ su
$ ln -s /home/<login>/git/<mon-projet>.git

Utilisation des tag

  • Poser un drapeau :
    • git tag X : poste le drapeau X sur le commit courant.
    • git tag : liste l'ensemble des drapeaux.
    • git checkout -b nouvellebranche X : crée une nouvelle branche nouvellebranche dont le dernier commit pointe sur le drapeau X.
    • Par exemple, pour poser un tag sur un projet et l'envoyer sur le serveur, il suffit de faire :
 git tag vxxxx
 git push --tags
  • Créer une branche distante à partir tag
    • Il peut être nécessaire, après la création d'un drapeau, de créer une branche à partir de ce drapeau et ainsi de proposer facilement à l'utilisateur un moyen de contribuer à n'importe qu'elle branche. VLE emploie ce système. Pour créer une nouvelle branche à partir d'un tag :
git checkout -b branchelocal v0.6.0
 [vim]
git commit -a
 
# création d'une branche 0.6.0
git push origin branchelocal:refs/heads/0.6.0
 
# publication des commit sur une branche distante 0.6.0
git push origin branchelocal:0.6.0
 
# destruction de la branche distante 0.5.0
git push origin :0.6.0


This page was last modified on 17 May 2010, at 13:17. This page has been accessed 4,709 times.